python-无法从 csv 中读取所有行
python-cant read from all rows from a csv
我正在尝试从如下所示的 CSV 文件中读取列 "Transcript Text" -
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."
还有我的代码,用于读取第 1 列。 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 行。
你的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.
从表面上看,您似乎使用了错误的 quotechar。来自 csv docs:
Instructs writer objects to only quote those fields
which contain special characters such as delimiter, quotechar or any
of the characters in 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."]]
这是 Python2,但值得一试,看看它是否能解决您的问题
我看到的第一个问题是你给出了 |
的引号字符,但看起来你的引号字符应该是 "
,因为第 8 列(转录文本)包含在 "
,不是 |
.
此外,我喜欢读取第一行(当列 headers 存在时)并使用 zip 创建列数据字典而不是按索引访问(当列更改顺序时可能会出错)
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)
将您的代码更改为以下内容,
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 文件中读取列 "Transcript Text" -
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."
还有我的代码,用于读取第 1 列。 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 行。
你的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.
从表面上看,您似乎使用了错误的 quotechar。来自 csv docs:
Instructs writer objects to only quote those fields which contain special characters such as delimiter, quotechar or any of the characters in 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."]]
这是 Python2,但值得一试,看看它是否能解决您的问题
我看到的第一个问题是你给出了 |
的引号字符,但看起来你的引号字符应该是 "
,因为第 8 列(转录文本)包含在 "
,不是 |
.
此外,我喜欢读取第一行(当列 headers 存在时)并使用 zip 创建列数据字典而不是按索引访问(当列更改顺序时可能会出错)
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)
将您的代码更改为以下内容,
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])
如果这可行的话。