我有一个csv文件,其列完全由['spam','eggs',...,'spam']等列表组成。理想情况下,我想将所有这些列表聚合成一个巨大的列表,但是这样做会遇到麻烦;最初我想的是:
import csv
with open(<filepath>, 'r') as csvfile:
reader = csv.reader(csvfile)
lst = []
for row in reader:
lst += row
所以我的想法基本上是每个“阅读器中的行”或多或少都是列表['垃圾邮件','鸡蛋',......,'垃圾邮件')而且我可以将这些组合在一起在一个时间,但显然遇到了一些问题。反正有没有让这项工作?任何帮助表示赞赏!
编辑:为了给出更多上下文,让我们说这个csv只有一列和三行,每行都是字面上的“['垃圾邮件','鸡蛋','垃圾邮件','鸡蛋']”。所需的输出是:
"['spam', 'eggs', 'spam', 'eggs', 'spam', 'eggs', 'spam', 'eggs', 'spam', 'eggs', 'spam', 'eggs']"
但我从代码中得到的输出是:
"[['spam', 'eggs', 'spam', 'eggs'], ['spam', 'eggs', 'spam', 'eggs'], ['spam', 'eggs', 'spam', 'eggs']]
所以问题在于如何解决这类问题。
答案 0 :(得分:0)
包含['spam', 'eggs', 'spam', 'eggs']
的文件不是CSV文件。内容看起来更像是Python列表的字符串文字版本。鉴于您可能最好将它们视为Python列表文字,并使用ast.literal_eval()
解析它们:
from ast import literal_eval
with open(<filepath>) as infile:
lst = []
for line in infile:
lst.extend(literal_eval(line))
如果您的输入文件包含以下内容:
['spam', 'eggs', 'spam', 'eggs'] ['more', 'spam', 'more', 'eggs'] ['spam', 'spam', 'spam', 'spam']
lst
最终将包含此内容:
['spam', 'eggs', 'spam', 'eggs', 'more', 'spam', 'more', 'eggs', 'spam', 'spam', 'spam', 'spam']