Jaki jest najlepszy sposób otwarcia pliku jako do odczytu / zapisu, jeśli istnieje, a jeśli nie, to utwórz go i otwórz jako plik do odczytu / zapisu? Z tego, co przeczytałem, file = open('myfile.dat', 'rw')
powinienem to zrobić, prawda?
To nie działa dla mnie (Python 2.6.2) i zastanawiam się, czy jest to problem z wersją, czy też nie powinien tak działać, czy co.
Najważniejsze jest to, że potrzebuję tylko rozwiązania problemu. Ciekawi mnie inne rzeczy, ale wszystko, czego potrzebuję, to dobry sposób na wykonanie części otwierającej.
Załączający katalog był możliwy do zapisu przez użytkownika i grupę, a nie inny (jestem w systemie Linux ... więc uprawnienia 775 innymi słowy), a dokładny błąd to:
IOError: brak takiego pliku lub katalogu.
python
linux
file-io
file-permissions
trh178
źródło
źródło
file
istnieje.Odpowiedzi:
Powinieneś używać
open
z tymw+
trybem:źródło
w
obcina istniejący plik. docs: Tryby'r+'
,'w+'
i'a+'
otworzyć plik do aktualizacji (zauważ, że'w+'
obcina pliku).open('myfile.dat', 'w')
to wystarczy.Zaletą następującego podejścia jest to, że plik jest poprawnie zamknięty na końcu bloku, nawet jeśli po drodze zostanie zgłoszony wyjątek. Jest to równoważne
try-finally
, ale znacznie krótsze.Metoda seek () ustawia bieżącą pozycję pliku.
źródło
filename
?Dobrą praktyką jest stosowanie następujących elementów:
źródło
Zmień „rw” na „w +”
Lub użyj „+” do dodania (nie usuwając istniejącej zawartości)
źródło
r + oznacza odczyt / zapis
źródło
Od wersji Python 3.4 należy używać
pathlib
do „dotykania” plików.Jest to o wiele bardziej eleganckie rozwiązanie niż proponowane w tym wątku.
To samo dotyczy katalogów:
źródło
touch
aktualizuje czas ostatniej modyfikacji, gdy jest używany.touch
z wiersza poleceń w systemie Linux, więc zakładam, że jest to zamierzone zachowanie.Moja odpowiedź:
źródło
przykład:
Mam nadzieję, że to pomoże. [Używam Pythona w wersji 3.6.2]
źródło
open('myfile.dat', 'a')
działa dla mnie, w porządku.w py3k twój kod podnosi
ValueError
:w Pythonie-2.6 podnosi
IOError
.źródło
Posługiwać się:
Uwaga: Pliki muszą być zamknięte po ich otwarciu, a z menedżera kontekście jest to dobry sposób pozwolić Pythona zająć się tym za Ciebie.
źródło
Co chcesz zrobić z plikiem? Tylko do niego piszesz, czy oba czytają i piszą?
'w'
,'a'
pozwoli na zapis i utworzy plik, jeśli nie istnieje.Jeśli musisz czytać z pliku, plik musi istnieć przed jego otwarciem. Możesz przetestować jego istnienie przed otwarciem lub użyć try / wyjątkiem.
źródło
Myślę, że
r+
nierw
. Jestem tylko starterem i właśnie to widziałem w dokumentacji.źródło
Umieść w + do zapisywania pliku, obcinania, jeśli istnieje, r +, aby odczytać plik, tworzenie go, jeśli nie istnieje, ale nie zapisywanie (i zwracanie wartości null) lub + do tworzenia nowego pliku lub dołączania do istniejącego.
źródło
Więc chcesz zapisać dane do pliku, ale tylko jeśli jeszcze nie istnieje ?.
Problem ten można łatwo rozwiązać za pomocą mało znanego trybu x do otwarcia () zamiast zwykłego trybu w. Na przykład:
Jeśli plik jest w trybie binarnym, użyj trybu xb zamiast xt.
źródło
Jeśli chcesz otworzyć go do odczytu i zapisu, zakładam, że nie chcesz go obcinać podczas otwierania i chcesz móc odczytać plik zaraz po jego otwarciu. Oto rozwiązanie, którego używam:
źródło
może to pomoże
Najpierw zaimportuj moduł OS do pliku PY
następnie utwórz zmienną o nazwie save_file i ustaw ją na plik, który chcesz ustawić jako html lub txt w tym przypadku na plik txt
następnie zdefiniuj funkcję, która użyje metody pliku os.path.is, aby sprawdzić, czy plik istnieje, a jeśli nie, utworzy plik
i w końcu wywołaj funkcję
źródło
źródło