首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python-无法从csv中读取所有行

python-无法从csv中读取所有行
EN

Stack Overflow用户
提问于 2016-04-11 19:05:54
回答 4查看 1.5K关注 0票数 0

我正试着阅读CSV文件中的“文本文本”栏,该文件如下-

代码语言:javascript
复制
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栏(文本)的代码是这样的-

代码语言:javascript
复制
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()

现在,当我循环这个过程时,它跳过了一些值,并不是所有的v7值都被打印出来。奇怪的是,计数器值也没有打印出来。

输出结果如下-

代码语言:javascript
复制
0
Transcript Text
3
STUDENT:  Yes, that's right.

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

代码语言:javascript
复制
file_csv = open("test.csv", newline='', encoding ='utf-8')

但什么都不管用。而且非常奇怪的是,每次我运行这个,结果都是不稳定的,也就是说,以前没有打印的一些行会被打印出来。

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-04-11 19:19:16

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

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

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

代码语言:javascript
复制
import csv

file_csv = open("so.csv")
csv_reader = csv.reader(file_csv, delimiter=',', quotechar='"')
conversation = []

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

headers = [header.replace(" ", "_").lower() for header in csv_reader.next()]
for data in csv_reader:
    columns = dict(zip(headers, data))
    conversation.append(columns["transcript_text"])

file_csv.close()

for i, item in enumerate(conversation):
    print(i, item)
票数 0
EN

Stack Overflow用户

发布于 2016-04-11 19:16:46

您的quotechar是双引号"

此外,启动python3时,您应该使用这种类型的文件处理,尝试它:

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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.
票数 0
EN

Stack Overflow用户

发布于 2016-04-11 19:19:03

从表面上看,看起来你使用的是错误的商标法。来自csv文档

指示编写器对象只引用那些包含特殊字符的字段,例如分隔符、勘探器或行终止符中的任何字符。

出于某种原因,您正在传递一个管道字符作为验证符。但是很明显,您给出的数据使用的是双引号,这是默认的,并且似乎运行得很好:

代码语言:javascript
复制
>>> 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."]]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36557167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档