31
text_file = open("new.txt", "r")
lines = text_file.readlines()

for line in lines:
        var1, var2 = line.split(",");
        myfile = open('xyz.txt', 'w')
        myfile.writelines(var1)
        myfile.close()

text_file.close()

new.txt には 、 などの 10 行のテキストがありAdam:8154ます George:5234。ここで、名前だけを含むテキスト ファイルが必要です。、などをxyz.txt含める必要があります。上記のコードでは、10 番目の名前だけが残ります。AdamGeorge

1 つのテキスト ファイルに 10 人の名前すべてを含めるにはどうすればよいですか?

4

3 に答える 3

51

これは、 for ループ内でファイルを 10 回開き、書き込み、閉じているためです。

myfile = open('xyz.txt', 'w')
myfile.writelines(var1)
myfile.close()

for ループの外でファイルを開いたり閉じたりする必要があります。

myfile = open('xyz.txt', 'w')
for line in lines:
    var1, var2 = line.split(",");
    myfile.write("%s\n" % var1)

myfile.close()
text_file.close()

writelines ではなくwrite を使用することにも注意してください。

writelines行のリストをファイルに書き込みます。

withまた、ステートメントを使用してここに投稿された回答を確認する必要があります。これは、Python でファイルの読み取り/書き込み操作を行うエレガントな方法です。

于 2012-06-25T23:16:08.497 に答える
26

主な問題は、ループ内でファイルを繰り返し開いたり閉じたりしていたことでした。

このアプローチを試してください:

with open('new.txt') as text_file, open('xyz.txt', 'w') as myfile:  
    for line in text_file:
        var1, var2 = line.split(",");
        myfile.write(var1+'\n')

両方のファイルを一度に開きます。使用しwithているため、完了すると(または例外が発生すると)自動的に閉じられます。以前は、出力ファイルはループ内で繰り返しオープンエンドでした。

また、ファイルを一度にすべてメモリに読み込むのではなく、ファイルを1行ずつ処理しています(これは、非常に大きなファイルを処理する場合に問題になる可能性があります)。

write()改行('\n')は追加されないので、必要に応じて自分で追加する必要があることに注意してください(アイテムのリストではなく、単一のアイテムを作成しているwritelines()ので、に置き換えました)。write()

r読み取り用にファイルを開く'r'場合、これはデフォルトのモードであるためオプションです。

于 2012-06-25T23:18:10.190 に答える
11

コンテキストマネージャを使用してファイルを自動的に閉じることをお勧めします

with open("new.txt", "r"), open('xyz.txt', 'w') as textfile, myfile:
    for line in textfile:
        var1, var2 = line.split(",");
        myfile.writelines(var1)
于 2012-06-25T23:19:11.290 に答える