python - Python将txt文件转换为列表-优化
问题描述
所以我有一个相当大的 .txt 文件,我试图用 python 解释日期。该文件如下所示:
...
EUR/USD,20190801 00:00:00.142,1.10717,1.10718
EUR/USD,20190801 00:00:00.252,1.10717,1.10719
EUR/USD,20190801 00:00:02.580,1.10717,1.10718
EUR/USD,20190801 00:00:02.642,1.10716,1.10718
EUR/USD,20190801 00:00:03.580,1.10717,1.10718
...
我需要从中提取最后的值。到目前为止,我已经尝试过:
import datetime
x = 0
while x < 10:
with open('eurusd_ticks.txt', 'r') as f:
lines = f.readlines()
text = lines[x]
bid = text.split(',')[2]
ask = text.split(',')[3]
print(bid, ask, datetime.datetime.now())
x += 1
它运作良好,这是输出:
1.10717 1.10718
2019-11-20 09:19:21.641936
1.10717 1.10719
2019-11-20 09:19:22.342880
1.10717 1.10718
2019-11-20 09:19:22.968176
1.10716 1.10718
2019-11-20 09:19:23.580704
1.10717 1.10718
2019-11-20 09:19:24.189093
1.10716 1.10718
2019-11-20 09:19:24.800332
1.10717 1.10718
2019-11-20 09:19:25.413064
1.10715 1.10717
2019-11-20 09:19:26.020620
1.10715 1.10715
2019-11-20 09:19:26.629382
1.10715 1.10717
2019-11-20 09:19:27.235971
但是仅仅阅读 10 行就需要将近 6 秒,而我需要阅读其中的 2,700,000 行(以这种速度将需要超过 31 天)。
也许有办法优化这个过程?
解决方案
您应该逐行读取,而不是读取内存中的整个文件(我猜整个文件使用当前代码大约需要 10 秒)。
这是一个很小的调整,但会产生很大的不同:
import datetime
with open('eurusd_ticks.txt', 'r') as f:
for line in f:
bid = line.split(',')[2]
ask = line.split(',')[3]
print(bid, ask, datetime.datetime.now())
为了更容易使用,您应该考虑使用该csv
模块
推荐阅读
- webpack - 有没有办法只使用 Webpack 来管理“任务依赖”
- jquery - jquery停止弹出按钮点击生成其他点击
- android - 除带有彩色操作系统的 OPPO 外,服务在所有手机上都能正常工作。在 oppo 中,服务会持续运行一段时间,但随后停止工作。有什么解决方案吗?
- http - 如何使用 http 而不是 https 在 Heroku 上提供 Golang 应用程序?
- c++ - 在qt中通过鼠标拖动滚动
- admin - Hyperledger Composer PeerAdmin 网络管理员集中化?
- python - 使用 gml 文件中的多边形遮罩栅格的最快方法
- php - GoDaddy 上的 Laravel artisan 不接受任何数据库用户,为什么?
- android - 如何使用android开发中的下载链接从Firebase存储下载pdf文件
- rabbitmq - RabbitMq 集群如何帮助可扩展性?