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

2024-04-18 19:08:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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

有什么提示我能做些什么来修复它吗?你知道吗


Tags: in文本元素列表for文件名withline
3条回答

如果使用for n in textblock:遍历textblock,则n将获取textblock中每个项的值(因此nlist)。如果您尝试获取textblock[n],那么您尝试使用列表n作为索引。你知道吗

你只需要:

for x in textblock:
    for line in x:
        # do stuff with the line

不要尝试关闭ffile——它是由with块自动关闭的。你知道吗

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

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

^{}将在遍历列表时为您提供索引和项。你知道吗

您可以使用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]在每个iteration中给出1,2,3。不需要[1,2,3][i]

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

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

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

for inner_list in outer_list:

但是我们想使用outer_listinner_list的位置将每个inner_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()方法要求向它传递一个字符串。我们可以很容易地将我们的内部列表转换成字符串。我首选的方法是使用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))

相关问题 更多 >