web-dev-qa-db-ja.com

文字列のリストをファイルに書き込んで改行を追加する方法は?

def generator():
    nums = ['09', '98', '87', '76', '65', '54', '43']
    s_chars = ['*', '&', '^', '%', '$', '#', '@',]

    data = open("list.txt", "w")
    for c in s_chars:
        for n in nums:
            data.write(c + n)
    data.close()

すべての「c + n」の後に改行を追加したいと思います。

12
b1ackzer0

変化する

data.write(c + n)

data.write("%s%s\n" % (c, n))
17
dietbuddha

適切に配置されたdata.write('\n')がそれを処理します。句読点を付けたいループに合わせて適切にインデントします。

他の回答ですでに指摘したように、c+nに '\ n'を追加するか、フォーマット文字列 "%s%s\n"を使用することで実行できます。

関心事として、2つのネストされたループの代わりにリスト内包表記を使用する方がPythonicだと思います。

data.write("\n".join("%s%s"%(c,n) for c in s_chars for n in nums))
4
MAK

変化する

data.write(c+n)

data.write(c+n+'\n')
1
Marc Poulin

Pythonのprintは、標準の「改行付き印刷」関数です。

したがって、Python 2.xを使用すると、直接実行できます。

print  >> data, c+n

Python 3.xを使用する場合:

print(c+n, file=data)
1
Eric O Lebigot

writelinesおよびproductを使用してCレイヤーにさらに作業をプッシュする:

from future_builtins import map  # Only do this on Python 2; makes map generator function
import itertools

def generator():
    nums = ['09', '98', '87', '76', '65', '54', '43']
    s_chars = ['*', '&', '^', '%', '$', '#', '@',]
    # Append newlines up front, to avoid doing the work len(nums) * len(s_chars) times
    # product will realize list from generator internally and discard values when done
    nums_newlined = (n + "\n" for s in nums)

    with open("list.txt", "w") as data:
        data.writelines(map(''.join, itertools.product(s_chars, nums_newlined)))

これはネストされたループと同じ効果をもたらしますが、Cで実装された組み込み関数(とにかくCPythonリファレンスインタープリター)でこれを行い、画像からバイトコード実行のオーバーヘッドを取り除きます。これにより、特に入力が大きい場合にパフォーマンスが劇的に向上し、出力全体を'\n'.joinから単一の文字列に変換して単一のwrite呼び出しを実行する他のソリューションとは異なり、書き込み時に反復するため、メモリがピークになります。使用方法は固定されたままであり、メモリ内の出力全体を一度に1つの文字列で実現する必要はありません。

1
ShadowRanger

これは私のために働く

with open(fname,'wb') as f:
    for row in var:
        f.write(repr(row)+'\n')
0
DACW