我编写了一个python脚本来处理文本文件。 输入是一个有几行的文件。每行的开头都有一个数字(1,2,3。。。,n)。然后是一个空行,最后一行写了一些文字。你知道吗
我需要通读这个文件删除一些行在开始和一些在结束(说数字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的文件要处理,它已经运行了几个小时)。你知道吗
有人知道我该怎么改进吗?你知道吗
我会去掉中间的
for
循环和昂贵的.split()
:另外,在将三个数值参数传递到函数之前,请将它们转换为整数:
相关问题 更多 >
编程相关推荐