0

200を超えるファイルパスを含むテキストファイル(filenames.txt)があります。

/home/chethan/purpose1/script1.txt
/home/chethan/purpose2/script2.txt
/home/chethan/purpose3/script3.txt
/home/chethan/purpose4/script4.txt

これらの各ファイルに存在する複数の行のうち、それぞれに。のようなファイル名の行が含まれていますReference.txt。私の目的は.txtReference.txt.csvすべてのファイルを置き換えることです。Pythonの初心者として、私は同様のケースでstackoverflowのいくつかの質問を参照し、次のコードを作成しました。

私のコード:

#! /usr/bin/python
#filename modify_hob.py

import fileinput

    f = open('/home/chethan/filenames.txt', 'r')
    for i in f.readlines():
        for line in fileinput.FileInput(i.strip(),inplace=1):
            line = line.replace("txt","csv"),
            f.close()
    f.close()

コードを実行すると、上記のtxtファイル(script1、script2 ..)の内容が消去されます。つまり、テキストが1行も含まれなくなります。私はこの振る舞いに戸惑い、解決策を見つけることができません。

4

1 に答える 1

1

これでうまくいくはずです(テストされていません):

#! /usr/bin/python
#filename modify_hob.py

# Open the file with filenames list.
with open('filenames.txt') as list_f:

    # Iterate over the lines, each line represents a file name.
    for filename in list_f:

        # Rewrite its content.
        with open(filename) as f:
            content = f.read()
        with open(filename, 'w') as f:
            f.write(content.replace('.txt', '.csv'))

以下のコードでfは、はのオープンファイルオブジェクトに設定されており、他にはfilename.txt何も設定されていません。これが、最後の2行の両方で閉じているものです。

また、ファイルに何も書き戻されていないため、変更がディスクに書き戻されることは期待できません。(fileinputモジュールが私が見逃しているいくつかのダークマジックを行わない限り。)

于 2012-04-22T12:44:06.713 に答える