Confused by python file mode " w+"
Z doc ,
Tryby 'r+', 'w+' I 'A+' otwierają plik do aktualizacji (zauważ, że' w+ ' obcina plik). Dołączenie' b 'do trybu, aby otworzyć plik w trybie binarnym, na systemach, które rozróżniają pliki binarne i tekstowe; na systemach, które nie mają tego rozróżnienia, dodanie 'b' nie ma wpływu.
I tutaj
W+: otwiera plik do zapisu i odczytu. Nadpisuje istniejący plik, jeśli plik istnieje. Jeśli plik nie istnieje, tworzy nowy plik do odczytu i zapisu.
Ale jak odczytać plik otwarty za pomocą w+
?
6 answers
Załóżmy, że otwierasz plik za pomocą with
instrukcji, tak jak powinieneś. Wtedy zrobiłbyś coś takiego, aby przeczytać ze swojego pliku:
with open('somefile.txt', 'w+') as f:
# Note that f has now been truncated to 0 bytes, so you'll only
# be able to read data that you write after this point
f.write('somedata\n')
f.seek(0) # Important: return to the top of the file before reading, otherwise you'll just read an empty string
data = f.read() # Returns 'somedata\n'
Zwróć uwagę f.seek(0)
-- jeśli o tym zapomnisz, wywołanie f.read()
spróbuje odczytać z końca pliku i zwróci pusty łańcuch.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-27 21:52:31
Oto lista różnych trybów otwierania pliku:
-
R
Otwiera plik Tylko do odczytu. Wskaźnik pliku jest umieszczony na początku pliku. Jest to tryb domyślny.
-
Rb
Otwiera plik do odczytu tylko w formacie binarnym. Wskaźnik pliku jest umieszczony na początku pliku. Jest to tryb domyślny.
-
R +
Otwiera plik zarówno do czytania, jak i pisania. Wskaźnik pliku będzie znajdował się na początku pliku.
-
Rb+
Otwiera plik do odczytu i zapisu w formacie binarnym. Wskaźnik pliku będzie znajdował się na początku pliku.
-
W
Otwiera plik Tylko do zapisu. Nadpisuje plik, jeśli plik istnieje. Jeśli plik nie istnieje, tworzy nowy plik do zapisu.
-
Wb
Otwiera plik do zapisu tylko w formacie binarnym. Nadpisuje plik, jeśli plik istnieje. Jeśli plik nie istnieje, tworzy nowy plik do zapisu.
-
W +
Otwiera plik do zapisu i odczytu. Nadpisuje istniejący plik, jeśli plik istnieje. Jeśli plik nie istnieje, tworzy nowy plik do odczytu i zapisu.
-
Wb +
Otwiera plik do zapisu i odczytu w formacie binarnym. Nadpisuje istniejący plik, jeśli plik istnieje. Jeśli plik nie istnieje, tworzy nowy plik do odczytu i zapisu.
-
A
Otwiera plik do dodania. Wskaźnik pliku znajduje się na końcu pliku, jeśli plik istnieje. Oznacza to, że plik jest w trybie dopisywania. Jeśli plik nie istnieje, tworzy nowy plik do zapisu.
-
Ab
Otwiera plik do dodania w formacie binarnym. Wskaźnik pliku znajduje się na koniec pliku, jeśli plik istnieje. Oznacza to, że plik jest w trybie dopisywania. Jeśli plik nie istnieje, tworzy nowy plik do zapisu.
-
A +
Otwiera plik do dodania i odczytu. Wskaźnik pliku znajduje się na końcu pliku, jeśli plik istnieje. Plik zostanie otwarty w trybie dopisywania. Jeśli plik nie istnieje, tworzy nowy plik do odczytu i zapisu.
-
Ab+
Otwiera plik dla obu dodawanie i odczyt w formacie binarnym. Wskaźnik pliku znajduje się na końcu pliku, jeśli plik istnieje. Plik zostanie otwarty w trybie dopisywania. Jeśli plik nie istnieje, tworzy nowy plik do odczytu i zapisu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-09 14:19:17
Wszystkie tryby plików w Pythonie
-
r
do czytania -
r+
otwiera się do odczytu i zapisu (nie można obciąć pliku) -
w
do pisania -
w+
do zapisu i odczytu (można obciąć plik) -
rb
do odczytu pliku binarnego. Wskaźnik pliku jest umieszczony na początku pliku. -
rb+
odczyt lub zapis pliku binarnego -
wb+
zapis pliku binarnego -
a+
otwiera dla dodawanie -
ab+
otwiera plik do dodania i odczytu w formacie binarnym. Wskaźnik pliku znajduje się na końcu pliku, jeśli plik istnieje. Plik zostanie otwarty w trybie dopisywania. -
x
Otwórz do tworzenia wyłącznie, jeśli plik już istnieje (Python 3)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-10 23:10:33
Plik jest obcinany, więc możesz wywołać read()
(nie ma wyjątków, w przeciwieństwie do otwarcia za pomocą 'w'), ale otrzymasz pusty łańcuch.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 06:57:23
Podejrzewam, że są dwa sposoby, aby poradzić sobie z tym, co myślę, że próbujesz osiągnąć.
1) co jest oczywiste, jest otworzyć plik Tylko do odczytu, odczytać go do pamięci, a następnie otworzyć plik z t, a następnie zapisać zmiany.
2) Użyj procedur obsługi plików niskiego poziomu:
# Open file in RW , create if it doesn't exist. *Don't* pass O_TRUNC
fd = os.open(filename, os.O_RDWR | os.O_CREAT)
Mam nadzieję, że to pomoże..Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-25 07:02:48
Właściwie, jest coś nie tak z innymi odpowiedziami na temat r+
mode.
test.in
zawartość pliku:
hello1
ok2
byebye3
I skrypt py:
with open("test.in", 'r+')as f:
f.readline()
f.write("addition")
Wykonaj go, a zawartość test.in
zostanie zmieniona na:
hello1
ok2
byebye3
addition
Jednak gdy zmienimy skrypt na:
with open("test.in", 'r+')as f:
f.write("addition")
test.in
wykonaj również odpowiedź:
additionk2
byebye3
Tak więc tryb r+
pozwoli nam zakryć zawartość Od początku, jeśli nie wykonamy operacji odczytu. A jeśli zrobimy coś operacja odczytu, f.write()
po prostu dopisze do pliku.
Przy okazji, jeśli f.seek(0,0)
przed f.write(write_content)
, write_content pokryje je z pozycji (0,0).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-29 01:42:05