【问题标题】:Python: How to write a list created from for loop into a text filePython:如何将从 for 循环创建的列表写入文本文件
【发布时间】:2020-06-15 18:14:45
【问题描述】:

使用字典对数据进行排序,我创建了一个邮政编码及其人口的列表。然后,我使用 for 循环遍历字典中的每个键以查找匹配的邮政编码,并在存在重复值时添加它们的人口(一些邮政编码出现多次)。我现在需要将在 for 循环中创建的长列表放入文本文件中。我的问题是,当我将列表写回文件时,它只会获取我的最后两个值。我的代码没有错误,但没有在文本文件中填充我的完整列表。下面是我迄今为止的代码预览,它捕获了我的邮政编码和人口总数。

for k in dict.keys():
    zip = (k)
    total_pop = int(dict[k]['pop']
    zip_list = [zip, str(total_pop)]
    new_zip_list = ",".join(zip_list)

    with open("test_file.txt", "w") as output:
       for row in new_zip_list:
           output.write(str(row)+"\n")

有人告诉我您不能将列表写入文本文件,因此创建了 new_zip_list 行来将我的列表转换为字符串。不确定这是否正确?

【问题讨论】:

  • 你的意思是把'with open()'作为第一行吗?
  • 老实说,我不确定在哪里放置“with open()”行。看来,当我尝试将列表写入文件时,它并没有拾取我创建的 for 循环中的每个元素。
  • btw 不要使用像 dictzip 这样的内置函数作为变量名。

标签: python list file dictionary text


【解决方案1】:

问题似乎在于这段代码:open("test_file.txt", "w") as output:

您正在写入文件而不是追加文件,因此您实际上是在删除其内容并覆盖其中的内容,而不是添加到文本文件中

所以我建议将其更改为: open("test_file.txt", "a") as output:

如果您知道该文件尚不存在,并且您只想访问它一次,您可以将open("test_file.txt", "w") as output: 移动到第一个 for 循环之前,这将创建该文件并让您写入它。

【讨论】:

  • 啊,效果更好,但我仍然有问题。该代码将每个单独的元素附加或实质上添加到新行。因此,不是将第一个邮政编码打印为“513”,而是 5、1 和 3 都出现在文件的新行上,这是我不想要的!
  • 也许您的意思是:output.write(new_zip_list) 而不是 for row in new_zip_list
  • 我是初学者,所以相信我,我很困惑 :(。我已经进行了您建议的更新,所以我的“with open”行现在位于我的字典的 for 循环上方。然后我构建了基于您的评论的新列表。现在,当我打印列表时,它看起来不错,直到它到达行。由于某种原因,列表已填充但最后一个值现在一遍又一遍地打印在更正列表的顶部。关于如何解决这个问题?
  • @jackosumtrades 我已经做到了,它是半工作的。当我将列表写回文件时,它会将每个对象都放在一行中。但是,我希望一个邮政编码及其人口位于同一行,然后为下一个邮政编码/流行音乐创建一个新行。这有意义吗?
【解决方案2】:

1) 将with 行移到循环外部的顶部。这将解决@jackosumtrades 指出的问题。

2) 改变构建new_zip_list 的方式。现在,它是一个字符串。当您使用 for 循环遍历字符串时,它一次给您一个字符。这是一种方法:

new_zip_list = [] # initialize

for k in dict.keys():
    new_zip_list.append(zip_list)

with open("test_file.txt", "w") as output:
    # write your output here

作为旁注,您的代码非常混乱。首先,您使用zip 作为变量,覆盖内置函数的名称。其次,变量zip_listnew_zip_list 并不能真正告诉您这些变量的作用或含义(而且,正如您现在所拥有的,其中只有一个是实际列表)。最后把total_pop做成int,然后转过来转成字符串。

【讨论】:

  • 更新我明白了。感谢大家的帮助。请不要再花时间在这上面了!
猜你喜欢
  • 2013-03-21
  • 2021-10-29
  • 2020-04-20
  • 2018-01-12
  • 1970-01-01
  • 1970-01-01
  • 2017-08-26
  • 2015-08-12
  • 1970-01-01
相关资源
最近更新 更多