Błąd przy zamykaniu pliku Python 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')

1

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

wynik=open('zad1.txt','w')
wynik.write("aaa")
wynik.close()
plik=open('liczby.txt','r')
tablica_wierszy=plik.read().split('\n')
plik.close()
2
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:~$
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.

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1