• 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..."

Fiszki IT
Fiszki IT
+1 głos
280 wizyt
pytanie zadane 4 lipca 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 przez Wiciorny Mędrzec (166,950 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 przez niezalogowany
edycja 4 lipca

"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 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 przez Wiciorny Mędrzec (166,950 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 przez niezalogowany

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

komentarz 4 lipca przez Wiciorny Mędrzec (166,950 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 przez niezalogowany
komentarz 4 lipca przez Wiciorny Mędrzec (166,950 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 przez VBService VIP (121,400 p.)
edycja 5 lipca 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 przez niezalogowany
edycja 5 lipca

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 przez adrian17 Ekspert (297,380 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 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 przez adrian17 Ekspert (297,380 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 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 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 przez adrian17 Ekspert (297,380 p.)
Wrzuć to w osobnym pytaniu i z pełnym kodem.
1
komentarz 14 lipca 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 przez Arkadiusz Waluk Ekspert (278,280 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 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 przez Comandeer Guru (558,640 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 135 wizyt
0 głosów
1 odpowiedź 65 wizyt
0 głosów
3 odpowiedzi 397 wizyt
pytanie zadane 11 września 2018 w Python przez Deriquest Użytkownik (550 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

84,751 zapytań

133,554 odpowiedzi

295,978 komentarzy

56,010 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...