我正在迭代一个大的csv文件,我想打印出一些进度指示器.据我所知,计算行数需要解析换行符的所有文件.所以我不能轻易估计行号的进度.
还有什么我可以做的,以便在阅读行时估计进度?也许我可以按尺寸去?
请检查这个名为tqdm https://github.com/noamraph/tqdm的小型(有用)库. 只需包装一个迭代器,然后在循环执行时显示冷却进度表.
图像说明了一切.

您可以使用它os.path.getsize(filename)来获取目标文件的大小.然后,当您从文件中读取数据时,可以使用简单的公式计算进度百分比
currentBytesRead/filesize*100%.该计算可以在每N行的末尾完成.
对于实际进度条,您可以在控制台中查看Text Progress Bar
这是基于 @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()
Run Code Online (Sandbox Code Playgroud)
您可以使用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
Run Code Online (Sandbox Code Playgroud)
您可以通过以下方式将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))
...
Run Code Online (Sandbox Code Playgroud)
如果您读取utf-8文件,则len(l)不会提供确切的字节数,但它应该足够好。
| 归档时间: |
|
| 查看次数: |
6427 次 |
| 最近记录: |