• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python >>>> Dlaczego ten program nie działa !?? "FileNotFoundError: [WinError 2] The system cannot..."

VPS Starter Arubacloud
+1 głos
1,389 wizyt
pytanie zadane 4 lipca 2021 w Python przez niezalogowany

Plik numer 1)  hotel_guest.py

from serialization import *


print("Witaj w programie do obslugi gosci hotelowych.")
wybor = -1

while(wybor != 0):
    wybor = int(input(
        "\nWybierz opcje: \n1–dodaj nowego goscia\n2–usun goscia\n3–znajdz goscia\n0–zakoncz dzialanie programu\n –> : "))

    if (wybor == 1):
        dodajGoscia()
    elif (wybor == 2):
        nazwisko = input("\nPodaj nazwisko usuwanego goscia: ")
        usunGoscia(nazwisko)
    elif (wybor == 3):
        nazwisko = input("\nPodaj nazwisko szukanego goscia: ")
        szukajGoscia(nazwisko)
    elif (wybor < 0 or wybor > 3):
        print("Nie ma takiej opcji!")

print("\nDziekuje za skorzystanie z mojego programu!")

Plik numer 2) serialization.py

import pickle
import os


def zapiszDane(daneGosci):
    with open("daneGosci", "wb") as plik:
        pickle.dump(daneGosci, plik)


def odczytajDane():
    daneGosci = {}
    statinfo = os.stat("daneGosci")
    if (statinfo.st_size == 0):
        return daneGosci
    try:
        with open("daneGosci", "rb") as plik:
            daneGosci = pickle.load(plik)
    except EOFError:
        print("Plik jest pusty!")
    return daneGosci


def dodajGoscia():
    daneGosci = {}
    nazwisko = input("Podaj nazwisko goscia: ")
    if (szukajGoscia(nazwisko) == 1):
        print("\nNie mozna dodac goscia! Istnieje juz gosc o takim nazwisku.")
        return 1
    imie = input("\nPodaj imie goscia: ")
    adres = input("Podaj adres goscia: ")
    telefon = input("Podaj telefon goscia: ")
    daneGosci = odczytajDane()
    daneGoscia = [imie, nazwisko, adres, telefon]
    daneGosci.update({daneGoscia[0]: daneGoscia})
    zapiszDane(daneGosci)
    daneGoscia = []


def szukajGoscia(nazwisko):
    daneGosci = {}
    daneGosci = odczytajDane()
    print("szukajGoscia", daneGosci)
    if (daneGosci.get(nazwisko, 0) != 0):
        print(daneGosci[nazwisko])
        return 1
    else:
        print("\nNie znaleziono goscia o takim nazwisku!")
        return 0


def usunGoscia(nazwisko):
    daneGosci = {}
    daneGosci = odczytajDane()
    del daneGosci[nazwisko]
    zapiszDane(daneGosci)

Po podaniu nazwiska gościa w opcji numer 1,2,3 terminal wypluwa błąd:

FileNotFoundError: [WinError 2] The system cannot find the file specified: 'daneGosci'

Opcja 0 działa bez zarzutu terminal pokazuje:

Dziekuje za skorzystanie z mojego programu!

Ktoś ma jakiś pomysł !? laugh

Pozdrawiam i życzę udanej Niedzieli Wszystkim wink

komentarz 4 lipca 2021 przez Wiciorny Ekspert (269,120 p.)
stary :D z tego co widze, znasz dobre praktyki programistyczne [ przynajmniej z tego co piszesz, odpowiadajac na forum innym] - to nie rób takiego bigosu jak juz piszesz po polsku, bo trudno debugować jak masz konwencje nazw tak podobną "gości" i "goscia" oraz analogicznie do tego operacje :D, sam sobie robisz problem, bo  pomylenie gośćia na gośći jest :D nieuniknione w dłuższym programie haha

Nauka przez praktyke nie zwalnia ze stosowania zasad, wrecz tym bardziej powinieneś to zachować
komentarz 4 lipca 2021 przez niezalogowany
edycja 4 lipca 2021

"stary" a skąd założenie że to program mojego autorstwa ???laugh

Hahaha

Kod pochodzi z książki do programowania z Pythonem żeby było zabawnie.cheeky

 

 

 

2
komentarz 4 lipca 2021 przez niezalogowany

@Wiciorny,
wziąłbyś się troszkę pogimnastykował a nie narzekał na "gości" i "gościa" smiley

Mógłbyś również nie generalizować i nie oceniać oraz nie zakładać z góry że wszystko wiesz ... bo to nie pasuje do człowieka który spędza i spędził z kodem kawał swojego życia wink

1
komentarz 4 lipca 2021 przez Wiciorny Ekspert (269,120 p.)
ja domenowo w Javie się znam, w pyhtonie :D to tutoriala oglądam, generalnie staram się coś znaleźć ale nie doradzam, ciekaw jestem problemu, ale po prostu nie pisze i nie znam pythona.
Nie wiem wszystkiego, ale wiem że niezaleznie od tego jaki język i co się robi "to zasady pisania kodu, solid-y inne pryncypia są wspólne" :)

jak taki kod jest w książce to przykre
1
komentarz 4 lipca 2021 przez niezalogowany

smileyyes no to dajmy szansę innym programistom ....

komentarz 4 lipca 2021 przez Wiciorny Ekspert (269,120 p.)

tylko w myśl błędu, tutaj w kodzie nie ma błędu, nie ma widoczności pliku, pewnie nie został on w książce wspomniany, że np. siedzi w pakiecie, czesto się to zdarza. 

def zapiszDane(daneGosci):
    with open("daneGosci", "wb") as plik:
        pickle.dump(daneGosci, plik)

Jako programista widzę opcje tego, że  może nie rozpoznaje "FORMATU PLIKU ?" 
i przez to nie może otworzyć pliku, lub ścieżka jest niepoprawna. 

czy to plik tekstowy?  open wtedy wymaga "daneGosci.txt"
 

komentarz 4 lipca 2021 przez niezalogowany
komentarz 4 lipca 2021 przez Wiciorny Ekspert (269,120 p.)

ale to nie ma znaczenia,  wb to nie jest określenie formatu pliku tylko tego w jaki sposób mamy dostęp do pliku i jak ma być przetwarzany. 
Plik może być zapisany jako JPG - i byc odczytany jako -byte, dalej obstawiam, brak rozumienia formatu pliku lub złą ścieżkę 

Open in binary mode (read/write using byte data)

 

Buffered Binary File Types

A buffered binary file type is used for reading and writing binary files. Here are some examples of how these files are opened:

open('abc.txt', 'rb')

open('abc.txt', 'wb')

 

komentarz 5 lipca 2021 przez VBService Ekspert (251,210 p.)
edycja 5 lipca 2021 przez VBService

@niezalogowany, u Mnie działa  wink

Python 3.8.3 (tags/v3.8.3:6f8c832, May 13 2020, 22:20:19) [MSC v.1925 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license()" for more information.
>>> 
================= RESTART: C:\Users\user\Desktop\hotel_guest.py ================
Witaj w programie do obslugi gosci hotelowych.

Wybierz opcje: 
1–dodaj nowego goscia
2–usun goscia
3–znajdz goscia
0–zakoncz dzialanie programu
 –> : 1
Podaj nazwisko goscia: Ipsum
szukajGoscia {'Ipsum': ['Ipsum', 'Lorem', 'Dolor', '12345']}
['Ipsum', 'Lorem', 'Dolor', '12345']

Nie mozna dodac goscia! Istnieje juz gosc o takim nazwisku.

Wybierz opcje: 
1–dodaj nowego goscia
2–usun goscia
3–znajdz goscia
0–zakoncz dzialanie programu
 –> : 2

Podaj nazwisko usuwanego goscia: Ipsum

Wybierz opcje: 
1–dodaj nowego goscia
2–usun goscia
3–znajdz goscia
0–zakoncz dzialanie programu
 –> : 3

Podaj nazwisko szukanego goscia: Ipsum
szukajGoscia {}

Nie znaleziono goscia o takim nazwisku!

Wybierz opcje: 
1–dodaj nowego goscia
2–usun goscia
3–znajdz goscia
0–zakoncz dzialanie programu
 –> : 1
Podaj nazwisko goscia: Ipsum
szukajGoscia {}

Nie znaleziono goscia o takim nazwisku!

Podaj imie goscia: Lorem
Podaj adres goscia: Dolor
Podaj telefon goscia: 12345

Wybierz opcje: 
1–dodaj nowego goscia
2–usun goscia
3–znajdz goscia
0–zakoncz dzialanie programu
 –> : 3

Podaj nazwisko szukanego goscia: Ipsum
szukajGoscia {'Ipsum': ['Ipsum', 'Lorem', 'Dolor', '12345']}
['Ipsum', 'Lorem', 'Dolor', '12345']

Wybierz opcje: 
1–dodaj nowego goscia
2–usun goscia
3–znajdz goscia
0–zakoncz dzialanie programu
 –> : 

 

ale znalazłem inne błędy w pliku serialization.py

# TO
daneGoscia = [imie, nazwisko, adres, telefon]

# ZAMIENIĆ NA TO
daneGoscia = [nazwisko, imie, adres, telefon]


# To raczej "kosmetyczna poprawka"
# TO
print("szukajGoscia", daneGosci)

# ZAMIENIĆ NA TO
print("szukajGoscia", nazwisko)

 

komentarz 5 lipca 2021 przez niezalogowany
edycja 5 lipca 2021

mógłbyś mi zreferować jakich zmian dokonałeś ? smiley  w plikach ?

W pliku hotel__guest.py ? i serialization.py ? zapisał Ci plik daneGosci binarny ?

Super ! winkyes

Umieść odpowiednio odpowiedz bo chciałbym ją oznaczyć....smiley

2 odpowiedzi

0 głosów
odpowiedź 4 lipca 2021 przez adrian17 Ekspert (344,100 p.)

The system cannot find the file specified: 'daneGosci'

A... na pewno ten plik istnieje? Z tego co widzę, każda opcja w kodzie zakłada że plik już istnieje.

Opcja 0 działa bez zarzutu

No tak, bo opcja 0 nic nie robi :)

komentarz 4 lipca 2021 przez niezalogowany

odpal kod u siebie w wolnej chwili... Uważam że dla Ciebie ta zagwozdka nie powinna stanowić większego problemu ..smiley.

 

komentarz 4 lipca 2021 przez adrian17 Ekspert (344,100 p.)
...co? Ja Ci odpowiedziałem a Twoja reakcja brzmi tak, jakbym to ja był tutaj osobą z problemem.

Ja rozumiem co ten kod robi; inna sprawa że cała ta logika w `odczytajDane()` wygląda mega dziwnie i rzuca cień na jakość książki którą czytasz :V
komentarz 4 lipca 2021 przez niezalogowany

to że jakość książki jest wątpliwa wiedziałem po przeczytaniu kilku stron.

Cieszę się ze rozumiesz ...smiley i bardzo dziękuje za Twoją wyczerpującą odpowiedź.

0 głosów
odpowiedź 14 lipca 2021 przez niezalogowany
from ser import *


zapiszDane(daneGosci={})


print("Witaj w programie do obslugi gosci hotelowych.")
wybor = -1


while(wybor != 0):
    wybor = int(input(
        "\nWybierz opcje: \n1–dodaj nowego goscia\n2–usun goscia\n3–znajdz goscia\n0–zakoncz dzialanie programu\n –> : "))
    if (wybor == 1):
        dodajGoscia()
    elif (wybor == 2):
        nazwisko = input("\nPodaj nazwisko usuwanego goscia: ")
        usunGoscia(nazwisko)
    elif (wybor == 3):
        nazwisko = input("\nPodaj nazwisko szukanego goscia: ")
        szukajGoscia(nazwisko)
    elif (wybor < 0 or wybor > 3):
        print("Nie ma takiej opcji!")

print("\nDziekuje za skorzystanie z mojego programu!")

zapiszDane(daneGosci={})

Ta linia kodu umożliwia utworzenie pliku podczas uruchamiania programu.Problem w tym że plik nie zapisuje trwałych zmian.Po wyjściu z programu plik jest "pusty" - brak danych zapisanych uprzednio gości... Ktoś zna receptę?

Czy może jest to niemożliwe?

komentarz 14 lipca 2021 przez adrian17 Ekspert (344,100 p.)
Wrzuć to w osobnym pytaniu i z pełnym kodem.
1
komentarz 14 lipca 2021 przez niezalogowany

na początek popracuj nad kulturą i magicznymi słowami typu "proszę".... Jako ekspert nie powinieneś mieć już w tej materii brakówsmiley Pozdrawiam i bardzo dziękuję za sugestię,nie skorzystam..

4
komentarz 14 lipca 2021 przez Arkadiusz Waluk Ekspert (287,550 p.)

Odpowiedzi, jak samo słowo mówi, służą do pisania odpowiedzi na dane pytanie. Nie jesteśmy przecież klasycznym forum, gdzie po prostu dodaje się kolejne posty - działamy w formule Q&A. W związku z tym dopytanie o coś, co dotyczy nadal tego samego problemu, powinno się odbyć w komentarzach lub ewentualnie przez edycję pytania. A gdy mamy kolejny problem, to zakładamy kolejne pytanie. Dzięki temu jest porządek, wszyscy widzą co jest czym.

Z całym szacunkiem, ale nikt tu Cię nie będzie błagał i prosił o przestrzeganie zasad. Doceniamy każdego użytkownika, miło że każdy się wypowiada, rozumiemy że każdy ma swoje pomysły i opinie, ale jednocześnie nie możemy wszystkich indywidualnie specjalnie prosić i liczyć, że może ubłagamy stosowanie się do regulaminu. Nie wydaje mi się więc, aby zwykła prośba "wrzuć to w osobnym pytaniu" była w jakikolwiek sposób niekulturalna, niemiła czy niestosowna. Nikt też nie będzie pytał czy masz ochotę korzystać z uwag jakie daje administracja - prośba jest prosta, wystarczyło zrobić to, co zostało napisane. Jeżeli naprawdę z jakiegoś powodu się nie zgadzasz czy jest inny problem, to wypadałoby się do tego odnieść merytorycznie, a nie próbą personalnego wytknięcia czegoś.

komentarz 14 lipca 2021 przez niezalogowany

Nie wydaje mi się więc, aby zwykła prośba "wrzuć to w osobnym pytaniu" była w jakikolwiek sposób niekulturalna, niemiła czy niestosowna

 

 

"Prośba"

" . «uprzejme zwrócenie się do kogoś w celu uzyskania, wyjednania czegoś» "

"uprzejme zwrócenie się do kogoś w celu uzyskania czegoś; skierowanie do kogoś jakiegoś życzenia"

https://sjp.pwn.pl/sjp/prosba;2508978.html

https://pl.wiktionary.org/wiki/pro%C5%9Bba

Dla mnie to nie wygląda jak prośba tylko jak rozkaz,polecenie. Ale to są jak widać różnice kulturowe i pewnych rzeczy nie przeskoczymy....

Oczywiście szanuje Twoją opinie i nie mam z nią problemów. Ja również mam nadzieję że Ty szanujesz moją .

Pozdrawiam Serdecznie i życzę Ci udanego i miłego Dniawink

Dziękuję za poświęcony mi czas!

2
komentarz 14 lipca 2021 przez Comandeer Guru (599,730 p.)

Ale to są jak widać różnice kulturowe i pewnych rzeczy nie przeskoczymy....

Byłoby fajnie, gdybyś nie obrażał innych ludzi, sugerując, że są niekulturalni, bo w tym temacie to Ty posłużyłeś się atakami ad hominem i w dodatku nie zastosowałeś się do polecenia administracji oraz postanowień regulaminu.

Podobne pytania

+1 głos
2 odpowiedzi 554 wizyt
0 głosów
1 odpowiedź 141 wizyt
0 głosów
3 odpowiedzi 938 wizyt
pytanie zadane 11 września 2018 w Python przez Deriquest Użytkownik (550 p.)

92,452 zapytań

141,262 odpowiedzi

319,080 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...