我有一个将csv文件读入列表和字典的代码。现在,我想“改进”我的代码以获取比我的RAM可以存储的更大的csv文件。 我查找了几个选项,找到了以下条目以及csv模块(How do you split reading a large csv file into evenly-sized chunks in Python?)的解决方案:
import csv
reader = csv.reader(open('4956984.csv', 'rb'))
def gen_chunks(reader, chunksize=100):
"""
Chunk generator. Take a CSV `reader` and yield
`chunksize` sized slices.
"""
chunk = []
for i, line in enumerate(reader):
if (i % chunksize == 0 and i > 0):
yield chunk
del chunk[:]
chunk.append(line)
yield chunk
for chunk in gen_chunks(reader):
print chunk # process chunk
我试图将代码实现到我的代码中,但是似乎代码没有将处理分成多个块。 这是我的先前代码:
ids = {}
corpus = []
with open(csv_file, newline='') as csvfile:
reader = csv.reader(csvfile, delimiter=';', quotechar='|')
documente = next(reader, None)[1:]
for rownumber, row in enumerate(reader):
for index, field in enumerate(row):
if index == 0:
if rownumber > 0:
ids[rownumber-1] = field
else:
if rownumber == 0:
corpus.append([])
else:
try:
corpus[index-1].append((rownumber-1, int(field)))
except ValueError:
corpus[index-1].append((rownumber-1, 0))
这是我用chunksize-modification修改的代码:
ids = {}
corpus = []
csvfile = open(dateiname_TDM, newline='')
reader = csv.reader(csvfile, delimiter=';', quotechar='|')
def gen_chunks(reader, chunksize=100):
"""
Chunk generator. Take a CSV `reader` and yield
`chunksize` sized slices.
"""
chunk = []
for i, line in enumerate(reader):
if (i % chunksize == 0 and i > 0):
yield chunk
del chunk[:]
chunk.append(line)
yield chunk
for chunk in gen_chunks(reader):
for rownumber, row in enumerate(reader):
for index, field in enumerate(row):
if index == 0:
if rownumber > 0:
ids[rownumber-1] = field
else:
if rownumber == 0:
corpus.append([])
else:
try:
corpus[index-1].append((rownumber-1, int(field)))
except ValueError:
corpus[index-1].append((rownumber-1, 0))
我认为我不能仅将小数部分实现到我的代码中,但是我不知道如何以另一种方式实现它。
有人可以帮我解决这个问题吗?
CSV文件是术语文档矩阵。第一行的意思是列出的所有文档,第一列的意思是列出的所有术语。在单元格中是文档列表集中某个术语的术语频率。我需要将语料库文件作为使用Gensim进行主题建模的输入。它必须是以下形式:
[[(i, j), (i+1, k),...], [...], [...]]
语料库文件具有文档数量的长度,并且在每个元组中都是从0开始到最后一个的术语的索引(i)
。 j
是文档i
中术语corpus[x]
的术语频率。
也许一次处理每个文档然后合并?