我正在使用大量CSV文件,每个文件包含大量行。我的目标是逐行获取数据,然后使用Python将其写入数据库。但是,因为有大量数据,所以我想跟踪已写入的数据量。为此,我计算了排队的文件数量,并在文件完成时继续添加一个。
我想对CSV文件执行类似的操作,并显示我所在的行以及总共有多少行(例如:)Currently on row 1 of X。我可以很容易地从第一行开始,然后执行以下操作:currentRow += 1,但是我不确定如何通过耗时的阅读行来获得总计。
另外,由于我的CSV文件都存储在zip归档文件中,因此我目前正在使用ZipFile模块读取它们,如下所示:
#The Zip archive and the csv files share the same name
with zipArchive.open(fileName[:-4] + '.csv', 'r') as csvFile:
lines = (line.decode('ascii') for line in csvFile)
currentRow = 1
for row in csv.reader(lines):
print(row)
currentRow += 1
Run Code Online (Sandbox Code Playgroud)
关于如何快速获取CSV文件总行数的任何想法?
如果不打开文件并计算行数,则无法计算文件中的行数。
如果您的文件太大,以至于row_count = sum(1 for row in file_handle)无法计算行数,并且无法将整个文件读入内存,则可能需要采用不同的方法。
获取文件的长度(以字节为单位)非常容易(How to check file size in python?)。如果您在阅读时计算每行的长度(以字节为单位),则可以报告“当前位于 4972397 的字节 13927 (2.8%)”
对于以 zip 格式存储的文件,Zipfile.getinfo(name).file_size是未压缩文件的大小。
如果您只想显示一些进度,可以尝试使用tqdm。
from tqdm import tqdm
with zipArchive.open(fileName[:-4] + '.csv', 'r') as csvFile:
lines = [line.decode('ascii') for line in csvFile]
currentRow = 1
for row in tqdm(csv.reader(lines), total=len(lines)):
print(row)
currentRow += 1
Run Code Online (Sandbox Code Playgroud)
这应该为您提供一个流畅的进度条,而您几乎不需要付出任何努力。
| 归档时间: |
|
| 查看次数: |
3438 次 |
| 最近记录: |