如何将字符串列表写入文件,添加换行符?

时间:2011-03-25 05:59:37

标签: python file-io newline

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”之后添加换行符。

9 个答案:

答案 0 :(得分:17)

更改

data.write(c + n)

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

答案 1 :(得分:5)

正确放置的data.write('\n')会处理这个问题。只需在你要标点的循环中适当缩进即可。

答案 2 :(得分:4)

正如其他答案已经指出的那样,您可以通过在c+n附加'\ n'或使用格式字符串“%s%s \ n”来实现。

正如我感兴趣的那样,我认为使用列表理解而不是两个嵌套循环会更加pythonic:

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

答案 3 :(得分:1)

Python的print是标准的“带换行符的打印”功能。

因此,如果您使用Python 2.x,则可以直接执行:

print  >> data, c+n

如果您使用Python 3.x:

print(c+n, file=data)

答案 4 :(得分:1)

更改

data.write(c+n)

data.write(c+n+'\n')

答案 5 :(得分:1)

使用writelinesproduct

将更多工作投入到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调用,它在写入时进行迭代,因此峰值内存使用率保持固定,而不是要求你在一个字符串中同时实现内存中的整个输出。

答案 6 :(得分:0)

这个适用于我

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

答案 7 :(得分:-1)

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 + "\n")
     data.close()

OR

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.write("\n")
     data.close()

取决于你想要的东西。

答案 8 :(得分:-1)

在之前的回复中,我的回答是错误的,因为我误解了要求,请忽略它。

我认为您可以使用join来简化内部循环

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