Z dokumentu ,
Tryby „r +”, „w +” i „a +” otwierają plik do aktualizacji (zwróć uwagę, że „w +” obcina plik). Dołącz „b” do trybu, aby otworzyć plik w trybie binarnym, w systemach rozróżniających pliki binarne i tekstowe; w systemach, które nie mają tego rozróżnienia, dodanie „b” nie ma wpływu.
i tutaj
w +: Otwiera plik do pisania i czytania. Zastępuje istniejący plik, jeśli plik istnieje. Jeśli plik nie istnieje, tworzy nowy plik do odczytu i zapisu.
Ale jak odczytać otwarty plik w+
?
Odpowiedzi:
Powiedzmy, że otwierasz plik
with
stwierdzeniem takim, jakim powinieneś być. Następnie możesz zrobić coś takiego, aby odczytać ze swojego pliku:Uwaga
f.seek(0)
- jeśli zapomnisz o tym,f.read()
wywołanie spróbuje odczytać z końca pliku i zwróci pusty ciąg.źródło
w+
„ nadpiszą istniejący plik, jeśli plik istnieje”. Więc jak tylko otworzysz plikw+
, jest on teraz pustym plikiem: zawiera 0 bajtów. Jeśli kiedyś zawierał dane, zostały one obcięte - odcięte i wyrzucone - a teraz rozmiar pliku wynosi 0 bajtów, więc nie można odczytać żadnych danych, które istniały przed otwarciem plikuw+
. Jeśli naprawdę chcesz przeczytać poprzednie dane i dodać je, powinieneś użyćr+
zamiastw+
.Oto lista różnych trybów otwierania pliku:
r
rb
r +
rb +
w
wb
w +
wb +
za
ab
a +
ab +
źródło
w+
tworzy nowy plik lub obcina istniejący plik, a następnie otwiera go do odczytu i zapisu;r+
otwiera istniejący plik bez obcięcia go do odczytu i zapisu. Bardzo różne.r
,w
luba
są wyłączne, aleb
można je dodać do dowolnego z nich, tak jak+
lubU
... To wybuch kombinatoryczny.rb
nie jest trybem domyślnym, cytat:The most commonly-used values of mode are 'r' for reading, 'w' for writing (truncating the file if it already exists), and 'a' for appending (which on some Unix systems means that all writes append to the end of the file regardless of the current seek position). If mode is omitted, it defaults to 'r'
docs.python.org/2/library/functions.html#openWszystkie tryby plików w Pythonie
r
do czytaniar+
otwiera się do odczytu i zapisu (nie może obciąć pliku)w
do pisaniaw+
do pisania i czytania (może obciąć plik)rb
do odczytu pliku binarnego. Wskaźnik pliku zostanie umieszczony na początku pliku.rb+
odczyt lub zapis pliku binarnegowb+
zapisywanie pliku binarnegoa+
otwiera się na dołączenieab+
Otwiera plik do dołączania i odczytu w formacie binarnym. Wskaźnik pliku znajduje się na końcu pliku, jeśli plik istnieje. Plik otwiera się w trybie dołączania.x
otwarte do wyłącznego tworzenia, awaria, jeśli plik już istnieje (Python 3)źródło
rb
Iwb
, nie wspominając oU
trybach w 2.x it
trybie w 3.x (które można łączyć ze wszystkim opróczb
).wb+
też czyta z pliku?r
do przeczytaniaw
do pisaniar+
do odczytu / zapisu bez usuwania oryginalnej treści, jeśli plik istnieje, w przeciwnym razie zgłoszenie wyjątkuw+
w celu usunięcia oryginalnej treści, a następnie odczyt / zapis, jeśli plik istnieje, w przeciwnym razie utwórz plikNa przykład,
źródło
Plik jest obcinany, więc można zadzwonić
read()
(bez wyjątków podniesiony, w odróżnieniu od kiedy otwarto używając „w”), ale dostaniesz pusty ciąg.źródło
Podejrzewam, że istnieją dwa sposoby radzenia sobie z tym, co myślę, że próbujesz osiągnąć.
1) co jest oczywiste, należy otworzyć plik tylko do odczytu, wczytać go do pamięci, a następnie otworzyć plik za pomocą t, a następnie zapisać zmiany.
2) użyj niskopoziomowych procedur obsługi plików:
Mam nadzieję że to pomoże..
źródło
r+
W rzeczywistości jest coś złego we wszystkich innych odpowiedziach dotyczących
r+
trybu.test.in
zawartość pliku :A skrypt py:
Wykonaj go, a
test.in
zawartość zostanie zmieniona na:Jednak gdy zmodyfikujemy skrypt, aby:
test.in
również wykonać Odpowiedz:Tak więc
r+
tryb pozwoli nam zakryć zawartość od samego początku, jeśli nie wykonamy operacji odczytu. A jeśli wykonamy operację odczytu,f.write()
po prostu dołączą się do pliku.Nawiasem mówiąc, jeśli
f.seek(0,0)
wcześniejf.write(write_content)
, write_content obejmie je z pozycji (0,0).źródło
Jak wspomniano w h4z3 , Do praktycznego użytku, czasami twoje dane są zbyt duże, aby bezpośrednio załadować wszystko, lub masz generator lub dane przychodzące w czasie rzeczywistym, możesz użyć w +, aby zapisać w pliku i przeczytać później.
źródło