问题:有一个600万行的文本文件。该文本文件包含以字符串“AAAAAAA”开头的块,字符串“AAAAAAA”出现的次数为 160 万次。第一个块从文本文件的第 86 行开始。 需要编写一个算法来在此文件中找到相同的块并将它们写入新的文本文件:
第 1 块:
啊啊啊啊
....(AAAAAAA 之后和下一个 AAAAAAA 之前发生的事情)
还可以找到该文本文件的行号:...
第 2 块:
啊啊啊啊
....(AAAAAAA 之后和下一个 AAAAAAA 之前发生的事情)
还可以找到该文本文件的行号:...
等等\
我尝试这样做,以便首先将“AAAAAA”出现的行号输入到数组中。然后我从文件中重新读取这些块,并查看它们是否在字典中,如果没有,则将它们添加到字典中,如果是,则记下文本文件中的行号。但它运行速度非常慢,并给了我一个 MemoryError 。我在 10 个区块上测试了我的算法,它工作正常。\
from itertools import islice
mas_inst = []
block_nach = []
count = 0
dict = {}
file = open(r"C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag")
with open(r"C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag") as file:
for line in islice(file, 85, None):
if line.strip() == 'AAAAAA':
count = count + 1
mas_inst.append(count)
else:
count = count + 1
# print(line.strip())
print(len(mas_inst))
# print(mas_inst)
for i in range(0, len(mas_inst)-1):
with open(r"C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag") as file:
for line in islice(file, 84 + mas_inst[i], mas_inst[i+1] + 84):
block_nach.append(line)
block_nach = tuple(block_nach)
if block_nach not in dict:
dict[block_nach] = [84+mas_inst[i]]
else:
dict[block_nach] = dict[block_nach] + [84+mas_inst[i]]
# break
block_nach = list(block_nach)
block_nach.clear()
print('123')
with open("C:/Users/Azerty/Downloads/MyHypervisorDriver.vmp/Result.txt", 'w') as file_result:
for item in dict:
file_result.writelines(item)
file_result.write('Строчки в которых встречается блок')
file_result.write(str(dict[item]))
file_result.write('\n')
我需要帮助改进这个算法,或者也许有更快的方法来完成这个任务?
我不清楚你要解决的问题。如果总体目标是保存文件中以“AAAAAA”开头的行,您可以执行以下操作。
fileInput = open("C:\Users\Azerty\Downloads\MyHypervisorDriver.vmp\Copuies.tag", "r")
fileOutput = open(“data.txt”, “w”)
# Read and discard top 85 lines
for i in range(85):
fileInput.readline()
# Save lines to a file that start with “AAAAAAA”
for line in fileInput:
if line.startswith('AAAAAAA')
fileOutput.write(line)
fileInput.close()
fileOutput.close()
我的背景是生物信息学——这看起来像什么——并且很乐意继续提供帮助。