Chciałbym rozdzielić wątpliwości w takich sytuacjach - myślę, że to naprawdę sprawia, że kod jest czystszy, łatwiejszy w utrzymaniu i może być bardziej wydajny.
Masz 3 problemy: odczytanie pliku UTF-8, przetworzenie linii i zapisanie pliku UTF-8. Zakładając, że przetwarzanie jest oparte na linii, działa to doskonale w języku Python, ponieważ otwieranie i iterowanie po liniach pliku jest wbudowane w język. Oprócz tego, że jest bardziej przejrzysty, jest to również bardziej efektywne, ponieważ umożliwia przetwarzanie dużych plików, które nie mieszczą się w pamięci. Na koniec daje świetny sposób na przetestowanie kodu - ponieważ przetwarzanie jest oddzielone od pliku io, pozwala pisać testy jednostkowe, a nawet po prostu uruchamiać kod przetwarzania na przykładowym tekście i ręcznie przeglądać wyniki bez błądzenia się plikami.
Konwertuję linie na duże litery dla celów przykładu - prawdopodobnie przetwarzanie będzie bardziej interesujące. Lubię używać tutaj wydajność - to ułatwia przetwarzanie, aby usunąć lub wstawić dodatkowe linie, chociaż nie jest to używane w moim trywialnym przykładzie.
def process(lines):
for line in lines:
yield line.upper()
with codecs.open(file1, 'r', 'utf-8') as infile:
with codecs.open(file2, 'w', 'utf-8') as outfile:
for line in process(infile):
outfile.write(line)
"Plik nie powinien być nadpisany". Dlaczego jest tylko jeden otwarty, jeśli czytasz jeden plik i piszesz nowy plik? –
ponieważ jest to niedokończony kod. ... – Gusto
"ponieważ jest to niedokończony kod"? Co? "niedokończone" nie jest dobrym wytłumaczeniem niedopasowania między wymaganiami a kodem. Dlaczego jest tylko jeden otwarty? Popraw swój kod, aby lepiej odpowiadał Twoim wymaganiom. –