253

ドキュメントから、

モード 'r+'、'w+' および 'a+' は、更新のためにファイルを開きます ('w+' はファイルを切り捨てることに注意してください)。バイナリ ファイルとテキスト ファイルを区別するシステムでファイルをバイナリ モードで開くには、モードに 'b' を追加します。この区別がないシステムでは、「b」を追加しても効果はありません。

そしてここ

w+ : ファイルを書き込みと読み取りの両方で開きます。ファイルが存在する場合、既存のファイルを上書きします。ファイルが存在しない場合は、読み書き用に新しいファイルを作成します。

しかし、で開いたファイルを読む方法はw+

4

11 に答える 11

165

Python のすべてのファイル モード

  • r読書用
  • r+読み取りおよび書き込み用に開きます (ファイルを切り詰めることはできません)
  • w書き込み用
  • w+書き込みおよび読み取り用 (ファイルを切り詰めることができます)
  • rbバイナリファイルの読み取り用。ファイル ポインタは、ファイルの先頭に置かれます。
  • rb+バイナリ ファイルの読み取りまたは書き込み
  • wb+バイナリファイルの書き込み
  • a+追加のために開きます
  • ab+バイナリでの追加と読み取りの両方のためにファイルを開きます。ファイルが存在する場合、ファイル ポインタはファイルの末尾にあります。ファイルが追加モードで開きます。
  • x排他的な作成のために開きます。ファイルが既に存在する場合は失敗します (Python 3)
于 2013-04-25T10:30:37.103 に答える
14

r読むために

w書き込み用

r+ファイルが存在する場合は元のコンテンツを削除せずに読み取り/書き込みを行い、そうでない場合は例外を発生させます

w+元のコンテンツを削除し、ファイルが存在する場合は読み取り/書き込み、存在しない場合はファイルを作成

例えば、

>>> with open("file1.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file1.txt", "w+") as f:
...   f.write("c")
... 

$ cat file1.txt 
c$
>>> with open("file2.txt", "r+") as f:
...   f.write("ab\n")
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'file2.txt'

>>> with open("file2.txt", "w") as f:
...   f.write("ab\n")
... 
>>> with open("file2.txt", "r+") as f:
...   f.write("c")
... 

$ cat file2.txt 
cb
$
于 2019-07-18T01:01:01.080 に答える
2

あなたが達成しようとしていると私が思うことを処理するには、2つの方法があると思います。

1)明らかなのは、ファイルを読み取り専用で開き、メモリに読み取ってから、tでファイルを開き、変更を書き込むことです。

2) 低レベルのファイル処理ルーチンを使用します。

# 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)

お役に立てれば..

于 2013-04-25T07:02:48.480 に答える