python无法从csv中读取所有行

python无法从csv中读取所有行,python,excel,csv,encoding,utf,Python,Excel,Csv,Encoding,Utf,我正在尝试从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,AM

我正在尝试从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()
0
Transcript Text
3
STUDENT:  Yes, that's right.
现在当我循环这个时,它跳过了一些值,并不是所有v[7](column-transcript text)的值都被打印出来。奇怪的是,计数器值也没有打印出来

输出如下所示-

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()
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')
但什么都不管用。而且非常奇怪的是,每次我运行这个,结果都不稳定,即一些以前没有打印的行被打印出来

这里可能有什么问题?
(使用Python3.5,我使用的实际csv文件大约有25k行。

您的
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.

从表面上看,您似乎使用了错误的报价。从:

指示编写器对象仅引用这些字段 包含特殊字符,如分隔符、引号或任何 行终止符中的字符数

出于某种原因,您将管道字符作为引号传递。但很明显,您提供的数据使用了双引号字符,这是默认值,并且似乎工作正常:

>>> 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."]]

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

我看到的第一个问题是,您给出的引号字符是
|
,但看起来您的引号字符应该是
,因为第8列(转录文本)被包装在
,而不是
|

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


将代码更改为以下内容:

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])

如果这样做有效。

您使用的是什么操作系统?您能显示csv文件的前2-3行吗?这样做有效,但我想在代码中使用索引,因为我想根据某列中的值筛选出某些行。例如,-如果v[3]=foo,则添加v[7]到字符串。同时更正引号并没有更正python 3中的问题。现在的输出是这样的-对于输入“Theme's”,输出是“Theme\x92re”。这意味着它通过代码隐式转换为utf。