gpt4 book ai didi

python csv扭曲告诉

转载 作者:太空宇宙 更新时间:2023-11-04 01:29:34 24 4
gpt4 key购买 nike

我试图找到我在阅读 csv 文件时所处位置的百分比。我知道如何使用带有文件对象的 tell() 来执行此操作,但是当我使用 csv.reader 读取该文件对象时,然后在我的读取器对象中的行上执行 for 循环,tell() 函数总是返回,就像它位于文件末尾,无论我在循环中的哪个位置。我怎样才能找到我所在的位置?

当前代码:

with open(FILE_PERSON, 'rb') as csvfile:
spamreader = csv.reader(csvfile)
justtesting = csvfile.tell()
size = os.fstat(csvfile.fileno()).st_size
for row in spamreader:
pos = csvfile.tell()
print pos, "of", size, "|", justtesting

我把“justtesting”放在那里只是为了证明 tell() 确实返回 0,直到我开始我的 for 循环。

这将为我的 csv 文件中的每一行返回相同的内容:579 的 579 | 0

我做错了什么?

最佳答案

csv 库在读取文件时使用缓冲区,因此文件指针会在较大的 block 中跳跃。它不会逐行读取您的文件。

它以更大的 block 读取数据以使解析更容易,并且由于换行符可以嵌入引号中,因此无法逐行读取 CSV 数据。

如果您必须给出进度报告,那么您需要预先计算行数。仅当您的输入 CSV 文件未在列值中嵌入换行符时,以下内容才有效:

with open(FILE_PERSON, 'rb') as csvfile:
linecount = sum(1 for _ in csvfile)
csvfile.seek(0)
spamreader = csv.reader(csvfile)
for line, row in enumerate(spamreader):
print '{} of {}'.format(line, linecount)

还有其他方法可以计算行数(请参阅 How to get line count cheaply in Python? )但是由于您无论如何都将读取文件以将其作为 CSV 进行处理,因此您不妨使用你为此打开的文件。我不确定将文件作为内存映射打开,然后再次将其作为普通文件读取是否会更好。

关于python csv扭曲告诉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14879428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com