我正在尋找一種方法來修改此功能,以便將數據附加到列表中不會產生內存錯誤。Python(追加列表時出現內存錯誤)
我有一個程序逐行讀取一個文件,並根據一些條件(該文件將有超過1000000行)將此文件中的數據寫入文本文件。我有追加幾個列表(它們很長)的函數,然後我將列表中的數據逐行寫入文本文件。
如果文件達到最大行數(1000000),我將它分割。 它工作得很好,但我需要下面的函數附加一個額外的列表(我修改了這個例子)和當我追加0到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[:]
而不是創建'list_11'和'list_22',然後迭代它們來比較'list_1'和'list_2',你可以在迭代工作簿的行時檢查'list_1'和'list_2'。這將刪除整個人羣中的兩個列表併爲您節省大量內存。據說,這聽起來像是你已經達到了4GB的內存限制。= 32位。如果上述內容不符合您的需求,您也可以使用子流程。 –
這兩個額外列表的原因是這個電子表格有一些數字數據,例如,我需要比較兩個列表中的日期,我將這些列表中的日期與這些新列表中的日期進行比較,如果它們是等於(或基於for循環的條件),然後我將數字追加到新列表中。希望我不會把我的解釋複雜化:) –