使用Python中的进度指示器迭代大文件?

时间:2014-07-22 14:39:11

标签: python

我正在迭代一个大的csv文件,我想打印出一些进度指示器。据我所知,计算行数需要解析换行符的所有文件。所以我不能轻易估计行号的进度。

在阅读行时,我还能做些什么来估计进度吗?也许我可以按尺寸去?

5 个答案:

答案 0 :(得分:8)

请检查这个名为 tqdm https://github.com/noamraph/tqdm的小型(有用)库 您只需在循环执行时包装迭代器和冷却进度表。

图像说明了一切。

enter image description here

答案 1 :(得分:7)

您可以使用os.path.getsize(filename)来获取目标文件的大小。然后,当您从文件中读取数据时,可以使用简单的公式计算进度百分比 currentBytesRead/filesize*100%。这个计算可以在每N行结束时完成。

对于实际进度条,您可以查看Text Progress Bar in the Console

答案 2 :(得分:5)

您可以使用os.path.getsize(或os.stat)来获取文本文件的大小。 然后,每当您解析一个新行时,以字节为单位计算该行的大小并将其用作指示符。

import os
fileName = r"c:\\somefile.log"
fileSize = os.path.getsize(fileName)

progress = 0
with open(fileName, 'r') as inputFile:
    for line in inputFile:
        progress = progress + len(line)
        progressPercent = (1.0*progress)/fileSize

#in the end, progress == fileSize

答案 3 :(得分:3)

您可以通过以下方式对大型文件使用tqdm:

import os
import tqdm

with tqdm.tqdm(os.path.getsize(filename)) as pbar:
   with open(filename, "rb") as f:
      for l in f:
          pbar.update(len(l))
          ...

如果您读取了utf-8文件,那么您的len(l)不会提供确切的字节数,但是应该足够了。

答案 4 :(得分:0)

这是基于@Piotr对Python3的回答

import os
import tqdm

with tqdm(total=os.path.getsize(filepath)) as pbar:
    with open(filepath) as file:
        for line in file:
            pbar.update(len(line.encode('utf-8')))
            ....
        file.close()