Python 如何正确读取csv并将其输入列表?

Python 如何正确读取csv并将其输入列表?,python,list,csv,Python,List,Csv,我正在尝试以以下格式将.csv文件中的一组数据读入数组: [a,b,c,d],[e,f,g,h],…] 运行下面的代码,当我打印带有空格(“”)的条目时,我访问元素的方式不正确,因为它在第一个空格(“”)处停止。 例如,如果Business、Fast Company、Youtube、fastcompany是第10个条目……当我打印以下内容时,我会在单独的行中看到: 生意,快 公司,YouTube,FastCompany 关于如何获得结果的任何建议:[[a,b,c,d],[Business,Fas

我正在尝试以以下格式将.csv文件中的一组数据读入数组: [a,b,c,d],[e,f,g,h],…]

运行下面的代码,当我打印带有空格(“”)的条目时,我访问元素的方式不正确,因为它在第一个空格(“”)处停止。 例如,如果Business、Fast Company、Youtube、fastcompany是第10个条目……当我打印以下内容时,我会在单独的行中看到: 生意,快 公司,YouTube,FastCompany

关于如何获得结果的任何建议:[[a,b,c,d],[Business,Fast Company,Youtube,fastcompany],[e,f,g,h],…]

import csv

partners = []
partner_dict = {}
i=9
with open('partners.csv', 'rb') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
    for row in spamreader:
        partners.append(row)

    print len(partners)

    for entry in partners[i]:
        print entry

分隔符
参数指定使用哪个字符将文件的每一行分割为单独的值。由于您正在传递“”(一个空格),因此读取器正在拆分空格

如果这确实是一个逗号分隔的文件,请使用“,”作为分隔符(或者只保留
分隔符
参数,它将默认为“,”


此外,管道字符是引号字符的一个不寻常的值。您的输入文件包含管道而不是引号,这是真的吗?您提供的示例数据既不包含管道也不包含引号。

您的代码存在一些问题:

  • 迭代列表的“正确”语法是伙伴中条目的
    ,而不是伙伴[i]中条目的
  • 代码中的
    partners\u dict
    变量似乎未使用,我假设您稍后会使用它,所以我现在将忽略它
  • 您正在以二进制方式打开文本文件(使用
    open(file\u name,“r”)
    而不是
    open(file\u name,“rb”)
  • 处理后的数据仍在上下文管理器中完成(
    使用…[as…]:
    -block)
  • 您的输入文本似乎按“
    ”、“
    ”分隔,但在解析时按“
    分隔
如果我正确理解了您的问题,那么您的问题似乎是由上一个问题引起的。“显而易见的解决方案”可能是将
delimeter
参数更改为
,“
,但是模块只允许单字符字符串作为分隔符。那么我们该怎么办呢?既然
”,“
确实是“真正的”分隔符(与空格相反,它永远不应该位于实际的无引号数据中),这似乎是一个很好的解决方案。但是,现在您的所有值都以
开头,这可能不是您想要的。那么您要做什么呢?嗯,所有字符串都有一个非常整洁的
strip()
方法,默认情况下会删除字符串开头和结尾的所有空白。因此,对于
strip()
所有值,让我们使用“列表理解”(对列表中的所有项计算表达式,然后返回一个包含新值的新列表),它应该看起来有点像
[i.strip(),表示行中的i]
在将其附加到
合作伙伴之前

最后,您的代码应该看起来像这样:

import csv

partners = []

with open('partners.csv', 'r') as csvfile:
    spamreader = csv.reader(csvfile, delimiter=',', quotechar='|')
    for row in spamreader:
        partners.append([i.strip() for i in row])

print len(partners)

for entry in partners:
    print entry

您已将分隔符指定为“”,希望得到什么?能否显示文件的几行?您需要用您提供的引号字符引用字符串。例如,
| Business,Fast Company,Youtube,fastcompany