我正在迭代一个大的csv文件,我想打印出一些进度指示器。据我所知,计算行数需要解析换行符的所有文件。所以我不能轻易估计行号的进度。
在阅读行时,我还能做些什么来估计进度吗?也许我可以按尺寸去?
答案 0 :(得分:8)
答案 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()