Я написал сценарий python для обработки текстовых файлов. Ввод - файл с несколькими строками. В начале каждой строки есть число (1, 2, 3 ..., n). Затем пустая строка и последняя строка, на которой написан какой-то текст.Улучшение чтения файлов кода python
Мне нужно прочитать этот файл, чтобы удалить некоторые строки в начале, а некоторые в конце (например, число от 1 до 5, а затем число 78 до конца). Я хочу записать оставшиеся строки в новом файле (в новом каталоге) и перенумеровать первые числа, записанные на этих строках (в моем примере 6 станет 1, 7 2 и т. Д.)
Я написал следующее:
def treatFiles(oldFile,newFile,firstF, startF, lastF):
% firstF is simply an index
% startF corresponds to the first line I want to keep
% lastF corresponds to the last line I want to keep
numberFToDeleteBeginning = int(startF) - int(firstF)
with open(oldFile) as old, open(newFile, 'w') as new:
countLine = 0
for line in old:
countLine += 1
if countLine <= numberFToDeleteBeginning:
pass
elif countLine > int(lastF) - int(firstF):
pass
elif line.split(',')[0] == '\n':
newLineList = line.split(',')
new.write(line)
else:
newLineList = [str(countLine - numberFToDeleteBeginning)] + line.split(',')
del newLineList[1]
newLine = str(newLineList[0])
for k in range(1, len(newLineList)):
newLine = newLine + ',' + str(newLineList[k])
new.write(newLine)
if __name__ == '__main__':
from sys import argv
import os
os.makedirs('treatedFiles')
new = 'treatedFiles/' + argv[1]
treatFiles(argv[1], argv[2], newFile, argv[3], argv[4], argv[5])
Мой код работает правильно, но слишком медленно (у меня есть файлы о 10Gb для лечения, и это работает уже в течение нескольких часов).
Кто-нибудь знает, как я могу его улучшить?
You пытаются проанализировать 10Gb txt? Если у вас нет суперкомпьютера, вы должны ожидать, что это займет недели, даже с эффективным кодом. Что вы пытаетесь достичь? –
@SamyBencherif: Это совсем не так. – Blender
@Samy Я анализирую несколько таких файлов в большинстве дней. –