我需要處理幾個非常大的文件(每個大於90GB)。只有一小部分文件對我很重要。我想掃描文件並將必要的行寫入另一個文件,所以我不需要每次運行實驗時都處理這些大文件。每行大約有1000個字符。python - 處理非常大的文件(> 90GB)
我使用下面的代碼:
def readFile(inputFile, outputFile):
startDate = datetime.datetime.strptime('10/06/2010 00:00:00', '%m/%d/%Y %H:%M:%S')
endDate = datetime.datetime.strptime('10/13/2010 23:59:59', '%m/%d/%Y %H:%M:%S')
total_lines = 0
with open(inputFile, 'r') as a_file:
for a_line in a_file:
total_lines += 1
id, date, content = splitLine(a_line)
datetime_object = datetime.datetime.strptime(date, '%m/%d/%Y %H:%M:%S')
if (datetime_object > startDate and datetime_object < endDate):
appendToFile(outputFile, a_line)
return total_lines
def splitLine(long_string):
values = long_string.split(",")
return values[0],values[1],values[2]
def appendToFile(outputFile, outputString):
try:
file = open(outputFile, 'a+')
file.write(outputString)
file.close()
except Exception as ex:
print("Error writing to file: " + outputFile)
return
的問題是,我每次運行該腳本時,該過程被卡住各地10.000.000th線。當我使用htop
命令時,我可以看到Python在卡住時僅使用大約8GB的RAM,並且使用的虛擬內存不斷增加,然後OS在一段時間後終止該進程。
我使用了不同的文件,以及Python 2.7和3.5。我也嘗試使用with open(inputFile, 'r', 16777216)
來使用緩衝,但結果沒有改變。我在macOS Sierra 10.12.4上運行代碼,機器有16GB的RAM。
任何想法?
'appendToFile()'做了什麼?你應該包括一個完整的例子,其中包括*所有代碼需要重現問題(「[mcve]」)。 – Carpetsmoker
不要在評論中發佈你的代碼,你可以[編輯]你的問題;-) – Carpetsmoker
@Carpetsmoker編輯:) – gokhan