首页 > 解决方案 > 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 天)。

也许有办法优化这个过程?

标签: pythonfile

解决方案


您应该逐行读取,而不是读取内存中的整个文件(我猜整个文件使用当前代码大约需要 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模块


推荐阅读