python - 在非常大的文件中计算行大小固定的行
问题描述
我有一个非常大的 CSV 文件(6.2 GB)。我想使用python计算它有多少行。我目前拥有的是以下内容:
import time
file_name = 'TickStory/EURUSD.csv'
start = time.time()
with open(file_name) as f:
line_count = sum(1 for line in f)
print(line_count)
end = time.time()
print(end - start)
文件中的每一列都有固定数量的字符。文件内容如下:
Timestamp,Bid price 2012-01-01 22:00:36.416,1.29368 2012-01-01 22:00:40.548,1.29366 2012-01-01 22:01:48.884,1.29365 2012-01-01 22:01:53.775,1.29365 2012-01-01 22:01:54.594,1.29366 2012-01-01 22:01:55.390,1.29367 2012-01-01 22:02:40.765,1.29368 2012-01-01 22:02:41.027,1.29368 ... ...
我当前的代码大约需要 49.99 秒。有没有办法让它更快?
提前致谢。
注意:有很多可用的解决方案可以使用 python 廉价地查找行数。但是,我的情况与其他情况不同,因为在我的文件中,所有行都有固定数量的字符(标题行除外)。有什么办法可以利用它对我有利吗?
解决方案
由于每一行都有固定数量的字符,只需用 获取文件的大小(以字节为单位os.path.getsize
),减去标题的长度,然后除以每行的长度。像这样的东西:
import os
file_name = 'TickStory/EURUSD.csv'
len_head = len('Timestamp,Bid price\n')
len_row = len('2012-01-01 22:00:36.416,1.29368\n')
size = os.path.getsize(file_name)
print((size - len_head) / len_row + 1)
这假定文件中的所有字符都是 1 个字节。
推荐阅读
- node.js - 将 MongoDB 中的 JSON 文件导入 Nodejs 应用程序的最佳实践
- android - WebView 在显示来自 Google Docs 的 PDF 时随机打开白屏
- c# - 使用应用程序连接到 Service Fabric
- angular - Angular 语言服务在 VSCode 中不起作用
- c++ - 如何使用 ffmpeg 实现类似 get_next_frame 的功能?
- html - 如何使按钮与搜索栏内联?
- android - 如何获取可配置的设备名称
- php - madelineproto php电报库简历下载
- azure - Azure 流分析查询 - 进行合并
- javascript - 枚举的联合与枚举不一样吗?