csv文件列中的对象是列表。如何使用Python将这些组合成一个巨大的列表?

时间:2016-06-22 23:59:10

标签: python csv

我有一个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']]

所以问题在于如何解决这类问题。

1 个答案:

答案 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']