4

ファイルを開き、すべての「hola」を「hello」に置き換えるスクリプトを作成しようとしています。

f=open("kk.txt","w")

for line in f:
  if "hola" in line:
      line=line.replace('hola','hello')

f.close()

しかし、このエラーが発生しています:

トレースバック (最新の呼び出しが最後):
ファイル "prueba.py"、3 行目、f の行の場合: IOError: [Errno 9] 不正なファイル記述子

何か案が?

ハビ

4

4 に答える 4

7
open('test.txt', 'w').write(open('test.txt', 'r').read().replace('hola', 'hello'))

または、ファイルを適切に閉じたい場合:

with open('test.txt', 'r') as src:
    src_text = src.read()

with open('test.txt', 'w') as dst:
    dst.write(src_text.replace('hola', 'hello'))
于 2010-04-05T09:31:28.873 に答える
4

書き込み用にファイルを開きましたが、読み取り中です。読み取り用に元のファイルを開き、書き込み用に新しいファイルを開きます。交換後、元の out を名前変更し、新しいものを in に変更します。

于 2010-04-05T09:27:35.517 に答える
4

あなたの主な問題は、最初に書き込み用にファイルを開いていることです。書き込み用にファイルを開くと、ファイルの内容が削除されるため、置換が非常に困難になります。ファイル内の単語を置換する場合は、次の 3 段階のプロセスがあります。

  1. ファイルを文字列に読み込む
  2. その文字列で置換を行います
  3. その文字列をファイルに書き込みます

コード内:

# open for reading first since we need to get the text out
f = open('kk.txt','r')
# step 1
data = f.read()
# step 2
data = data.replace("hola", "hello")
f.close()
# *now* open for writing
f = open('kk.txt', 'w')
# step 3
f.write(data)
f.close()
于 2010-04-05T09:38:39.420 に答える
3

withステートメントを参照することもできます。

于 2010-04-05T09:31:14.910 に答える