获取CSV的长度以显示进度

时间:2016-08-18 18:38:32

标签: 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

关于如何快速获取CSV文件的总行数的任何想法?

3 个答案:

答案 0 :(得分:4)

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

这应该会给你一个光滑的进度条,你几乎没有任何努力。

答案 1 :(得分:3)

如果没有打开文件并计算行数,就无法计算文件中的行数。

如果您的文件太大以至于使用row_count = sum(1 for row in file_handle)计算行是不切实际的,并且将整个文件读入内存是非启动性的,则可能需要采用不同的方法。

以字节(How to check file size in python?)获取文件的长度非常容易。如果您在读取时计算每行的长度(以字节为单位),则可以报告“当前在字段13927的4972397(2.8%)”

对于存储在zip中的文件,Zipfile.getinfo(name).file_size是未压缩文件的大小。

答案 2 :(得分:0)

以下对我有用的东西

with open('./data.csv') as csv_file:
    lines = len(csv_file.readlines())

with open('./data.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    header = next(csv_reader)

    for row in tqdm(csv_reader, total=lines):
        print(row)