Błąd przy zamykaniu pliku Python 3

Błąd przy zamykaniu pliku Python 3
T1
  • Rejestracja:prawie 3 lata
  • Ostatnio:prawie 3 lata
  • Postów:3
0

Cześć, jestem jeszcze zielony w Pythonie 3 i nie mogę sobie poradzić
Dla kodu:

wynik=open('zad1.txt','w')
wynik.write("aaa")
wynik.close()
plik=open('liczby.txt','r').read()
plik.close()

Wyskakuje:
////////////////
Traceback (most recent call last):
File "c:\users\user\documents\python\b.py", line 5, in <module>
plik.close()
AttributeError: 'str' object has no attribute 'close'
/////////////////////////
Jeśli dam
plik=open('liczby.txt','r')
nie ma błędu, ale nie mogę zczytać, np. nie działa:
liczba = plik.split('\n')

lion137
Sformatuj kod.
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:mniej niż minuta
  • Postów:4935
0

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
1

plik=open('liczby.txt','r').read() - plik to nie plik tylko napis wczytany z pliku.

Kopiuj
wynik=open('zad1.txt','w')
wynik.write("aaa")
wynik.close()
plik=open('liczby.txt','r')
tablica_wierszy=plik.read().split('\n')
plik.close()

Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
edytowany 1x, ostatnio: _13th_Dragon
OT
  • Rejestracja:około 4 lata
  • Ostatnio:około miesiąc
  • Postów:20
2
Kopiuj
harold@debian11:~$ more cwiczenia.py
with open("liczby.txt", "w", encoding="UTF-8") as file:
        file.write("aaaa")
        file.write("bbbb")

with open("liczby.txt", "r", encoding="UTF-8") as file:
        plik = file.read()
        print(plik)
harold@debian11:~$ python3 cwiczenia.py
aaaabbbb
harold@debian11:~$ more liczby.txt
aaaabbbb
harold@debian11:~$
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
1

@Tomasz1977:

Odniosę się kilkoma słowami
użycie dłuższych sekwencji z kropkami dla wywołań widać często w profesjonalnym kodzie, ale należy to używać świadomie
każda metoda zwraca jakiś typ. W języku sztywno typowanym (Java, C#) w ogóle by się nie dało napisać close() na niewłaściwym typie, w dynamicznie typowanym pythonie się da - tylko kopnie później, na wykonaniu

open() -> zwraca uchwyt do pliku (na nim się da zrobić close() )
read() -> zwraca zawartości pliku (tam nie należy szukać close() )

O ile w kodzie profesjonalnym kropki są bardzo chętnie używane (a w językach sztywnotypowanych / kompilowanych wręcz kochane), to w razie jakiejkolwiek wątpliwości użyć zmiennej roboczej, i nie kombinować tak bardzo - dokładnie jak w kodzie @_13th_Dragon

_13th_Dragon napisał(a):

plik=open('liczby.txt','r').read() - plik to nie plik tylko napis wczytany z pliku.

Kopiuj
plik=open('liczby.txt','r')
tablica_wierszy=plik.read().split('\n')
plik.close()

If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
ZD
Myślę nad tym co napisałem ... tak, na interpreterach (dynamicznych językach) znacznie mniej mnie nosi, aby łączyć wiele "kropek". ZUUUUPEŁNIE inaczej na kompilowanych w dobrym IDE, np wyrażenia lambda to na tym się zasadzają

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.