由于我知道您对哪些数据感兴趣,因此我可以从经验中讲:
import csv
with open('Train.csv', 'rt') as csvfile:
reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in reader:
row[0] # ID
row[1] # title
row[2] # body
row[3] # tags
您当然可以每行选择您想要的任何内容,然后随意存储。
通过使用迭代器变量,您可以决定要收集哪些行:
import csv
with open('Train.csv', 'rt') as csvfile:
reader = csv.reader(csvfile, delimiter=' ', quotechar='|')
linenum = 0
tags = [] # you can preallocate memory to this list if you want though.
for row in reader:
if linenum > 1000 and linenum < 2000:
tags.append(row[3]) # tags
if linenum == 2000:
break # so it won't read the next 3 million rows
linenum += 1
它的好处还在于,当您逐行阅读时,这将真正使用低内存。
如前所述,如果您想要后面的情况,它仍然必须解析数据才能到达那里(这是不可避免的,因为 text 中有换行符,所以您不能跳到某一行)。就个人而言,我只是粗略地使用了 linux 的split
, 将文件分成块,然后编辑它们以确保它们以 ID 开头(并以标签结尾)。
然后我用:
train = pandas.io.parsers.read_csv(file, quotechar="\"")
快速读取拆分文件。