python中列表用某个数字出现的次数_如何使用Python计算大文件中每个数字的每次出现次数...

本文介绍了一种改进的Alexandru解决方案,通过一次性扫描文件、减少单元格写入次数和使用函数加速,旨在提升解析和写入Excel数据的速度。作者建议的优化策略可以显著加快处理1441x118数据的工作流程。
摘要由CSDN通过智能技术生成

这是Alexandru解决方案的改进版(未经测试…)(注意:Alexandru发布自己的答案时,我已经在写了这个答案,但既然他先发布了,如果它有助于解决您的问题,请给他信用)。

一般的想法是只对文件执行一次单次扫描,而不是连续执行170038(=>1441*118)次顺序扫描,并减少

sheet.write()

调用找到的行数,而不是一遍又一遍地重写同一单元格。

此外,使用函数将有助于更快的执行,因为局部变量访问比全局变量访问更快。

不知道这是否能很快解决你的问题,但至少应该

许多的

比您当前的实现速度快。

注:6米

{(int,int):int}

dict很容易放在大多数现代计算机的内存中(只是在我的内存中试过,我的内存已经很忙了),所以这不是问题(而且你已经在内存中读取了整个文件,这可能是更重的wrt/内存…)

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()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值