在.txt文件的多行中写入多个列表

2024-09-29 20:21:24 发布

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

我有一个CSV,为我工作的人提供数千行反馈。我已经将CSV拆分为每个人的列表,但我需要将其写入文件,并将所有列表写入其中,每个评论都在单独的一行

目前,我使用的是一种愚蠢的解决方案,只是将每个列表单独循环,如下所示:

with open('sgf.txt', 'a') as t:
    for item in jolist:
        t.write('%s\n' %item)
    for item in adamlist:
        t.write('%s\n' %item)

必须有一种方法可以做到这一点,而不必写出所有这些行(因为我有大约30个列表),而且这也不会在单独的列表之间留下空间


Tags: 文件csvintxt列表foraswith
2条回答
  • 您的输入最好是一个dict,而不是一个列表,输入人的(唯一的)姓名,这样您就可以对其进行迭代,而不是像d['jo'], d['adam'], ...这样的硬编码查找
  • 一个人的每个dict条目只能是一个条目,带有换行符\n。无需将CSV拆分为每个人的列表,这只会让事情变得更困难
  • 您需要多行CSV,带有空格转义,因此我强烈建议您使用pandas^{}/^{},而不是Python的蹩脚builtin ^{} module

示例代码:

import pandas as pd

# It's simpler to directly create a dataframe. But if you want to import your existing dict:
comments = {
 'jo':   'Could try harder\nAn apple a day makes the IT department bankrupt\n',
 'adam': 'Don\'t snore heavily during my presentations\nImprove the XYZ\n'
}

comments_df = pd.DataFrame.from_dict(comments, orient='index', columns=['Comments'])

comments_df.to_csv('out.csv', line_terminator='\n')

您的方法中的错误因素,即使yur任务变得繁琐,是在程序中为数据中的每个人硬编码变量

人名是数据,因此,不应将其设置为变量名。如果您有30个变量,那么遍历所有变量的唯一方法就是重复代码 对于每个(尽管使用函数可以最大限度地减少重复代码的数量)。(是的,有自动遍历所有变量的方法,但这不是基本编程,也不是最佳方法)

您应该做的是将数据保存在字典中。 所以,代替jolistadamlist。。。您的数据将保存在comments字典中,可访问为:

comments = {}
comments["jo"] = ...
comments["adam"] = ...

在这种方法下,名称是数据,而不是变量名,您可以迭代所有名称(及其相关内容),执行以下操作:

...
output = open("output.txt", "wt")
for name, comment_list in comments.items():
    for comment in comment_list:
         # ensure a comment have no line breaks:
         comment = comment.replace("\n", " ")
         output.write(f"{name} - {comment}\n")
output.close()

相关问题 更多 >

    热门问题