获取CSV长度以显示进度

ng1*_*716 4 python csv

我正在使用大量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文件总行数的任何想法?

Jam*_*s K 6

如果不打开文件并计算行数,则无法计算文件中的行数。

如果您的文件太大,以至于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是未压缩文件的大小。

  • 从技术上讲,对于 csv 文件,如果带引号的字符串内有换行符,则可能会产生错误。 (2认同)

Nat*_*ara 5

如果您只想显示一些进度,可以尝试使用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)

这应该为您提供一个流畅的进度条,而您几乎不需要付出任何努力。