python-cant从csv的所有行读取

时间:2016-04-11 19:05:54

标签: python excel csv encoding utf

我正在尝试阅读专栏" Transcript Text"来自CSV文件,看起来像这样 -

Order,LearningID,Gender,Race,College,  ID ,B,Transcript Text
1,T66666666B,Male,UNKNOWN,AMC,122333444,,(BEGIN INTERVIEW)
6,T77777777B,Male,UNKNOWN,AMC,133333333,,INTERVIEWER:  CTVA's your major?
7,T88888888B,Male,UNKNOWN,AMC,144444444,,"STUDENT:  Yes, that's right."

我的代码读取列号。 7(成绩单文本)看起来像这样 -

import csv       

file_csv = open("test.csv", newline='')
csv_reader = csv.reader(file_csv, delimiter=',', quotechar='|')
txt_string =''

common_words = ['mmhmm', 'interposing', 'xblank']

for i, v in enumerate(csv_reader):
    print (i)
    print(v[7])
    txt_string += v[7]

file_csv.close()

现在当我遍历这个时,它会跳过一些值,而不是打印v [7](列 - 成绩单文本)的所有值。奇怪的是,计数器值也不会被打印出来。

输出看起来像这样 -

0
Transcript Text
3
STUDENT:  Yes, that's right.

我已确保使用utf-8选项MS Excel保存csv,我也尝试将编码设置为utf-8。

file_csv = open("test.csv", newline='', encoding ='utf-8')

但没有任何作用。而且非常奇怪,每次我运行它时,结果都是不稳定的,也就是先前打印过的一些行被打印出来。

这可能是什么问题? (使用Python 3.5,我使用的实际csv文件大约有25k行。

4 个答案:

答案 0 :(得分:0)

您的quotechar是双引号" 另外,启动python3你应该使用这种文件处理方式,试试看:

text = ''
with open('test.csv', newline='') as csvfile:
csvFile = csv.reader(csvfile, delimiter=',', quotechar='"')
for row,data in enumerate(csvFile):
    print(row, data[7])
    text += data[7]

print(text)

输出:

0 Transcript Text
1 (BEGIN INTERVIEW)
2 INTERVIEWER:  CTVA's your major?
3 STUDENT:  Yes, that's right.
Transcript Text(BEGIN INTERVIEW)INTERVIEWER:  CTVA's your major?STUDENT:  Yes, that's right.

答案 1 :(得分:0)

从表面上看,您似乎正在使用错误的quotechar。来自csv docs

  

指示writer对象仅引用这些字段   其中包含特殊字符,如分隔符,quotechar或any   lineterminator中的字符。

出于某种原因,您将管道字符作为quotechar传递。但显然,你提供的数据是使用双引号字符,这是默认值,看起来效果很好:

>>> import csv, StringIO
>>> data = """Order,LearningID,Gender,Race,College,  ID ,B,Transcript Text
... 1,T66666666B,Male,UNKNOWN,AMC,122333444,,(BEGIN INTERVIEW)
... 6,T77777777B,Male,UNKNOWN,AMC,133333333,,INTERVIEWER:  CTVA's your major?
... 7,T88888888B,Male,UNKNOWN,AMC,144444444,,"STUDENT:  Yes, that's right."
... """
>>> fd = StringIO.StringIO(data)
>>> print list(csv.reader(fd))
[['Order', 'LearningID', 'Gender', 'Race', 'College', '  ID ', 'B', 'Transcript Text'], ['1', 'T66666666B', 'Male', 'UNKNOWN', 'AMC', '122333444', '', '(BEGIN INTERVIEW)'], ['6', 'T77777777B', 'Male', 'UNKNOWN', 'AMC', '133333333', '', "INTERVIEWER:  CTVA's your major?"], ['7', 'T88888888B', 'Male', 'UNKNOWN', 'AMC', '144444444', '', "STUDENT:  Yes, that's right."]]

答案 2 :(得分:0)

这是Python2,但值得一试,看看它是否解决了你的问题

我看到的第一个问题是你给出|的引用字符,但看起来你的引用字符应该是",因为第8列(脚本文本)包含在{{1}中}},而不是"

另外,我喜欢阅读第一行(当列标题存在时)并使用zip创建列数据字典而不是按索引访问(当列更改排序时可能会出错)

|

答案 3 :(得分:0)

将您的代码更改为以下内容,

with open(file) as f:
    reader = csv.reader(f)
    next(reader) # skip the header row
    for i, row in reader:
        print(i)
        print(row[7])

如果这样可行。