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