循环列表并保存不同的文件

时间:2015-04-12 12:20:08

标签: python list save

我在python中有一个包含4个元素的列表,这些元素本身就是行列表(文本)

我想将这些元素保存在带编号的文件名中。

for n in textblock:
    for line in textblock[n]:
        with open('file_{0}.dat'.format(n),'w') as ffile:
            ffile.write(textblock[n[line]])
            ffile.close()

我收到错误消息:

 for line in textblock[n]:
     TypeError: list indices must be integers, not list

任何暗示我可以做些什么来解决它?

4 个答案:

答案 0 :(得分:1)

如果您使用textblock迭代for n in textblock:,那么n将获取textblock中每个项目的值(因此n是{ {1}})。然后,如果您尝试获取list,那么您尝试使用列表textblock[n]作为索引。

你可以拥有:

n

请勿尝试关闭for x in textblock: for line in x: # do stuff with the line - 它会被ffile阻止自动关闭。

如果你想在文件名中使用索引,我认为你想要的是这样的:

with

enumerate会在您遍历列表时为您提供索引和项目。

答案 1 :(得分:1)

您可以使用enumerate

for n,m in enumerate(textblock, 1):
    with open('file_{0}.dat'.format(n),'w') as ffile:
        for line in m:
            ffile.write(line)

注意

  • with open将负责close()
  • for i in [1,2,3]在每个1,2,3中提供iteration。无需[1,2,3][i]

答案 2 :(得分:1)

让我们澄清您的数据结构。听起来像这样:

outer_list = [ ["STRING1", "STRING2", ...],
               ["STRING1", "STRING2", ...],
               ["STRING1", "STRING2", ...],
               ["STRING1", "STRING2", ...]
             ]

因此,让我们使用python的iterable for循环结构来遍历外部列表。

for inner_list in outer_list:

但我们希望使用inner_listinner_list的位置将每个outer_list的内容写入文件。让我们使用内置的enumerate()函数来获取位置。

for n, inner_list in enumerate(outer_list, 1):
    # write inner list to file

让我们检查一下将inner_list写入文件。

with open('file_{0}.dat'.format(n),'w') as ffile: # this is fine, well done.
    ffile.write(inner_list)

所有这些将是:

for n, inner_list in enumerate(outer_list, 1):
    with open('file_{0}.dat'.format(n),'w') as ffile:
        ffile.write(inner_list)
        # no need to close the file, the with syntax does this for you.

编辑:正如@mhawke所指出的那样,这里还需要一个步骤

write()方法要求传递一个字符串。我们可以很容易地将inner_list转换为字符串。我首选的方法是使用join()方法。我们可以指定我们将inner_list中的每个字符串与一个新行字符连接起来,以便它可以很好地打印,即

'\n'.join(inner_list)

因此我们的最终解决方案是:

for n, inner_list in enumerate(outer_list, 1):
    with open('file_{0}.dat'.format(n),'w') as ffile:
        ffile.write('\n'.join(inner_list))

答案 3 :(得分:0)

如果要编写列表列表,请使用csv模块:

import csv

for ind, lsts in enumerate(textblock):
    with open('file_{0}.dat'.format(ind),'w') as ffile:
        wr = csv.writer(file)
        wr.writerows(lsts)