Вот (непроверенная ...) улучшенная версия решения Александру (примечание: я уже писал этот ответ, когда Алексендру разместил его, но, поскольку он отправил первым, пожалуйста, дайте ему кредит, если он поможет решить вашу проблему).
Общая идея состоит в том, чтобы сделать только один проход файла вместо 170038 (=> 1441 * 118) последовательных последовательных сканирований и уменьшить количество вызовов sheet.write()
до числа найденных строк вместо перезаписи одного и того же клетки снова и снова и снова.
Также использование функций будет способствовать более быстрому выполнению, так как доступ к локальным переменным быстрее, чем с глобальными.
Не могу сказать, будет ли это достаточно быстро, чтобы решить вашу проблему, но оно должно быть, по крайней мере, на намного быстрее, чем ваша текущая реализация.
NB: диктор 6M {(int,int):int}
легко помещается в память большинства современных компьютеров (только что попробовал на моем, который уже довольно занят), так что это не проблема (и вы все равно уже читали весь файл в памяти, что, вероятно, гораздо тяжелее по сравнению с памятью ...)
from collections import defaultdict
def parse_file():
counts = defaultdict(int)
with open("Data.txt") as f:
for lineno, line in enumerate(f):
line = line.strip()
if not line:
continue
try:
xy = tuple(int(i) for i in line.split(","))
except (TypeError, ValueError) as e:
print("oops, line {} is broken ? (found '{}')".format(lineno, line))
continue
counts[xy] += 1
return counts
def write_counts(counts):
book = xlsxwriter.Workbook("MyCount.xlsx")
sheet1 = book.add_worksheet('Sheet 1')
sheet1.write(0,0,'y\x')
for i in range (0,1441):
sheet1.write(0,i+1,i)
for i in range (1,118):
sheet1.write(i,0,i)
for (x, y), count in counts.items():
sheet1.write(y, x+1, count)
def main():
counts = parse_file()
write_counts(counts)
if __name__ == "__main__":
main()