Jak zapisać dane wyjściowe Pythona do pliku tekstowego
Jak odkryłem możliwość eksportowania wyników Pythona bezpośrednio do pliku tekstowego — w końcu!
Szczerze mówiąc, sam to przerabiałem. Piszesz trochę kodu w Pythonie, uruchamiasz go, a wszystkie dane wyjściowe po prostu wyświetlają się na konsoli. Przydatne do szybkich sprawdzeń, ale co, jeśli chcesz to zachować na później? Kiedyś kopiowałem i wklejałem, a potem zdawałem sobie sprawę, że zapomniałem połowy. Więc po kilku próbach i błędach – głównie próbach, z pewnością z kilkoma błędami – w końcu znalazłem dość prosty sposób na przesłanie danych wyjściowych mojego skryptu bezpośrednio do .txtpliku. Pomyślałem, że się nim podzielę, bo może to oszczędzi komuś kilku godzin frustracji.
Uruchomienie podstawowego skryptu
Po pierwsze, musisz mieć działający skrypt w Pythonie. Zazwyczaj po prostu tworzę main.pyplik. Zacznij tam pisać kod – ma sens, prawda? Trudno przekierować dane wyjściowe, jeśli skrypt po prostu unosi się w IDE lub nawet nie jest zapisany. Na moim starszym ASUS-ie był ukryty w menu Zaawansowane, więc wiem, jak trudno znaleźć odpowiednie miejsce! W każdym razie, uruchom skrypt z terminala lub wiersza poleceń. W systemie Windows to PowerShell lub CMD; na Linuksie/Macu po prostu Terminal. Upewnij się, że jesteś w odpowiednim folderze podczas uruchamiania.
Otwórz plik w trybie zapisu
Ta część na początku mnie zaskoczyła: otwieranie pliku wyjściowego.open()Funkcja Pythona jest twoim przyjacielem. Zasadniczo robisz to tak:
with open('output.txt', 'w') as file: # your code here
Oznacza to 'w'tryb zapisu, więc jeśli plik istnieje, najpierw zostaje wyczyszczony. Jeśli chcesz dodać coś do istniejącego pliku, zmień to na 'a'dopisywanie, ale na razie wolę zacząć od nowa. Uwaga: w dowolnym systemie plik zostanie utworzony w bieżącym katalogu roboczym, chyba że podasz pełną ścieżkę. Możesz sprawdzić, gdzie działa Twój skrypt, używając:
import os print(os.getcwd())
Przekierowanie print()do pliku tekstowego
To kluczowy krok. Zwykle print()po prostu wysyła dane wyjściowe do konsoli. Ale jeśli przekażesz fileargument, trafi on do tego pliku. Na przykład:
print('Here’s my output', file=file)
Zamiast zaśmiecać terminal, wszystko ląduje w output.txt. Odkryłem, że najłatwiej utrzymać porządek w kodzie, po prostu dodając file=fileargument przy każdym wydruku. W przeciwnym razie, jeśli chcesz tymczasowo przekierować wszystkie standardowe wyjście, możesz zamienić się sys.stdoutz uchwytem pliku, ale szczerze mówiąc, to bardziej skomplikowane i próbowałem tego tylko raz, ale ostatecznie okazało się, że nie jest to potrzebne.
Nie zapomnij zamknąć pliku
To był duży błąd, który ciągle popełniałem – zapominałem zamknąć plik. Jeśli go nie zamkniesz, dane wyjściowe mogą pozostać w buforze i nigdy nie zostać zapisane na dysku. Zaletą tego polecenia withjest to, że obsługuje to automatycznie, więc nie musisz pamiętać o wywołaniu file.close(). Jest to bardziej przejrzyste, bezpieczniejsze i niezawodne. Po zakończeniu bloku wszystko jest poprawnie zapisywane i zamykane.
Uruchamianie skryptu i sprawdzanie wyników
Gdy już wszystko ustawisz, po prostu uruchom skrypt, wpisując:
python main.py
lub jeśli używasz systemu Linux/Mac i Twoja konfiguracja domyślnie jest ustawiona na Python 3, wykonaj następujące kroki python3:
python3 main.py
Powinieneś zobaczyć wynik w środku output.txt. Jeśli nie, sprawdź ponownie ścieżkę skryptu, upewnij się, że jest on faktycznie wykonywany lub sprawdź, czy gdzieś nie czają się błędy. Czasami moje skrypty po cichu się zawieszały lub pomijały część drukowania, więc musiałem dodać kilka printpoleceń, aby sprawdzić, czy działają.
Krótkie podsumowanie – to nie jest fizyka kwantowa
- Utwórz plik Pythona (
main.py) - Otwórz plik w trybie zapisu (
with open('output.txt', 'w') as file:) - Użyj
print(..., file=file)dla wyniku, który chcesz zapisać - Użyj
withbloku, aby automatycznie zamknąć plik - Uruchom skrypt i sprawdź
output.txt
Szczerze mówiąc, kiedy już to rozgryzłem, debugowanie stało się o wiele łatwiejsze, zwłaszcza podczas długich przebiegów lub gdy potrzebowałem logów na później. Można też było zrobić coś takiego python main.py > output.txtbezpośrednio z terminala, ale spodobało mi się to podejście, ponieważ jest nieco bardziej kontrolowane w samym skrypcie.
A jeśli wysyłasz mnóstwo danych, dodawanie ich file.flush()od czasu do czasu może zapewnić, że wszystkie będą zapisywane w czasie rzeczywistym, a nie zalegają w pamięci. To miły dodatek, jeśli przesyłasz strumieniowo lub logujesz.
W każdym razie, mam nadzieję, że to pomoże – zajęło mi to zdecydowanie za dużo czasu, żeby to dobrze zrozumieć, i wyrywałem sobie włosy z głowy, zanim zdałem sobie sprawę, jakie to proste. Mam nadzieję, że komuś innemu się to przyda i oszczędzi weekendu na kombinowaniu. Powodzenia w kodowaniu!
Powiązane artykuły
Czy ten artykuł był pomocny?