[英]How to go easy on memory while iterating through a large CSV file in python?
我目前有一个200k行的csv文件,每行包含80个条目,用逗号分隔。 我尝试用open()打开csv文件,并将数据附加到2-D python列表中。 当我尝试遍历该列表并将80个条目附加到单个列表时,计算机会冻结。 我的代码是否会产生某种内存问题? 我应该批量处理我的数据还是有更有效的方法来完成我想要做的事情?
简而言之:打开csv,通过200k条目并从[1,2,3,4,5,...,80],[1,...,80],...... 200k转换它们 - > [ 12345 ... 80]。 [1 ... 80],200k
import csv
# create empty shells
raw_data = []
concatenate_data = []
def get_data():
counter = 1
# open the raw data file and put it into a list
with open('raw_data_train.csv', 'r') as file:
reader = csv.reader(file, dialect='excel')
for row in reader:
print('\rCurrent item: {0}'.format(counter), end='', flush=True)
raw_data.append(row)
counter += 1
print('\nReading done')
def format_data():
counter = 1
temp = ''
# concatenate the separated letters for each string in the csv file
for batch in raw_data:
for letters in batch:
temp += letters
concatenate_data.append(temp)
print('\rCurrent item: {0}'.format(counter), end='', flush=True)
counter += 1
print('\nTransforming done')
print(concatenate_data[0:10])
format_data()
例程必然会占用你的CPU很多:
string
连接,这是次优的而不是其他方法( StringIO
, str.join
) temp
变量 temp
(基本上附加一个越来越大的字符串)。 我想你只想这样做:将每行的所有文本附加为1个字符串,不加空格。 使用str.join
避免字符串连接要快得多:
for batch in raw_data:
concatenate_data.append("".join(batch))
如果你可以摆脱印刷品,甚至更快:
concatenate_data = ["".join(batch) for batch in raw_data]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.