0

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

运行下面的代码,当我打印带有空格('')的条目时,我访问元素的方式不正确,因为它在第一个空格('')处停止。例如,如果 Business、Fast Company、Youtube、fastcompany 是第 10 个条目......当我打印下面的内容时,我会在不同的行上显示:Business、Fast Company、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
4

2 回答 2

2

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

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

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

于 2012-10-10T15:10:01.777 回答
0

您的代码存在一些问题:

  • 迭代列表的“正确”语法是for entry in partners:,不是for entry in partners[i]:
  • 您代码中的partners_dict变量似乎未使用,我假设您稍后会使用它,所以我暂时忽略它
  • 您正在将文本文件作为二进制文件打开(使用open(file_name, "r")而不是open(file_name, "rb")
  • 您对已处理数据的处理仍然在上下文管理器 ( with ... [as ...]:-block)内完成
  • 您的输入文本似乎由 分隔", ",但您" "在解析时分隔

如果我正确理解了您的问题,那么您的问题似乎是由最后一个问题引起的。“明显的解决方案”可能是将delimeter参数更改为", ",但模块只允许单字符字符串作为分隔符。那么我们该怎么办?好吧,因为","它确实是“真正的”分隔符(它永远不应该在实际的未引用数据中,与空格相反),这似乎是一个很好的解决方案。但是,现在您所有的值都以" "可能不是您想要的开头。所以你会怎么做?好吧,所有字符串都有一个非常简洁的strip()方法,默认情况下会删除字符串开头和结尾的所有空格。所以,要strip() all the values, let's use a "list comprehension" (evaluates an expression on all items in a list and then returns a new list with the new values) which should look somewhat like [i.strip() for i in row] before appending it to partners.

In the end your code should hopefully look somewhat like this:

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
于 2012-10-10T15:41:50.323 回答