5

リスト内包表記を使用して、次のコードの機能を複製したいと思います。

with open('file.txt', 'w') as textfile:
    for i in range(1, 6):
        textfile.write(str(i) + '\n')

私は次のことを試しました:

with open('file.txt', 'w') as textfile:
    textfile.write(str([i for i in range(1, 6)]) + '\n')

しかし、(当然のことながら)[1, 2, 3, 4, 5]1行に1つの数字ではなく、を出力します。

「なぜあなたはそれをしたいのですか?」に対する答えがありません。可能かどうか見たいだけです。ありがとう!

編集:返信ありがとうございます。何らかの理由で、リスト内包表記は常ににカプセル化されているという印象を受けました[]

4

5 に答える 5

8

これを行う1つの方法は次のfile.writelines()とおりです。

with open('file.txt', 'w') as textfile:
    textfile.writelines(str(i) + "\n" for i in range(1, 6))
于 2013-02-22T02:01:48.303 に答える
2
textfile.write('\n'.join(str(i) for i in range(1,6)))

ほぼ同じです。これにより、末尾の改行が省略されます。それが必要な場合は、次のことができます。

textfile.write(''.join('{}\n'.format(i) for i in range(1,6)))
于 2013-02-22T02:01:14.833 に答える
1

また、他のアプリケーションで使用できるテキストを作成している場合は、CSVを作成していることが多く、csvモジュールを使用するとこれらのことが簡単になります。

(この場合、1行に1つの値しかないため、これは必要ない場合があります。)

import csv

with open("file.txt", "wb") as out_f:
    writer = csv.writer(out_f)
    writer.writerows([[i] for i in range(1, 6)])

モジュールは 、intからstrcsvへの変換を自動的に処理します。

于 2013-02-22T02:18:10.500 に答える
0

また、試すことができます、

with open('/tmp/foo.txt','w') as f:
    [f.write(str(i)+' ') for i in range(0,10)]

@monkutまたは@mgilsonの例で

于 2013-02-22T03:45:49.797 に答える
0

次のことを試してください。

open('/tmp/foo.txt','w').writelines(f'{i}\n' for i in range(10))
于 2019-06-01T01:15:43.157 に答える