问题描述
我正在寻找一种可能修改此功能的方法,因此将数据附加到列表不会产生“内存错误”。
我有一个程序,可以逐行读取一个文件,并根据某些条件将文件中的数据写入文本文件(该文件将有1000000多行)。 我有附加几个列表(它们很长)的函数,然后将列表中的数据逐行写入文本文件。
如果文件达到最大行数(1000000),我将其拆分。 它工作正常,但是我需要下面的函数来追加一个附加列表(在此示例中,我对其进行了修改), 当我在else语句中将0追加到列表时 ,会产生内存错误。
我使用的是64位操作系统,Windows 10(RAM 16GB),并且使用Python 2.7(32位)-但是拆分文件方法通常对我有用,而无需更新任何内容,这就是为什么我想知道是否可以解决通过修改循环来解决问题。
感谢您的任何建议!
# This function writes data to the lists based on the given conditions.*
def get_new_list(workbook, list_1, list_2, list_equal_values):
worksheet1 = workbook.sheet_by_name('SomeWorksheet')
list_11 = []
list_22 = []
list_new_values = []
# Get data from the worksheet and append to the lists.
for row in range(1, worksheet1.nrows):
value_11 = worksheet1.cell(row, 0).value
value_22 = worksheet1.cell(row, 1).value
new_value = worksheet1.cell(row, 10).value
list_11.append(value_11)
list_22.append(value_22)
list_new_values.append(new_value)
# Compare values from list_1, list_2 to values in list_11 and list_22.
for index in range(len(list_1)):
for i in range(len(list_11)):
if str(list_1[index]) == str(list_11[i]) \
and str(list_2 [index]) == str(list_22[i]):
value = list_new_values[i]
list_equal_values.insert(index, value)
elif str(list_1[index]) == str(list_11[i]) \
and str(list_2 [index]) != str(list_22[i]):
value = list_new_values[i]
list_equal_values (index, value)
**else:
# He is the problem, Memory Error, but I need to append 0
# if the first two conditions are not met**
list_equal_values.append(0)
return list_equal_values
# I empty the lists in case the file is split and new data is sent to this function.
del list_11[:]
del list_22[:]
del list_new_values[:]
1楼
问题不在于您的for循环。 随着您的阵列越来越大。 尝试删除所有不必要的数组或追加,以提高内存效率。
如果不可能,则可以尝试将部分结果存储在文件中,但这可能很麻烦。
如果您想要一个简单的解决方案,我记得我之前也遇到过类似的问题。 经过大量研究,我发现如果我切换到Python 2.7(64位)...问题就解决了!
希望能帮助到你! 我记得我花了很多时间解决这个问题,所以不要犯同样的错误