【问题标题】:Python CSV reader: truncating beginning of file? First 44797 rows missingPython CSV阅读器:截断文件的开头?缺少前 44797 行
【发布时间】:2020-02-09 18:58:34
【问题描述】:

我有一个 .csv 文件,我希望使用 csv 包通过 Python (3.x) 读取。但是,程序会截断文件的开头(前 44797 行)。

有问题的 .csv 文件可以从这个链接下载:https://www.kaggle.com/dgomonov/new-york-city-airbnb-open-data/downloads/new-york-city-airbnb-open-data.zip/3

file = "C:\\Users\\Owner\\Pictures\\Camera Roll\\new-york-city-airbnb- 
open-data\\AB_NYC_2019.csv"
rowsn = []
coln = []
with open(file, encoding="utf8") as csvfile:
    csvreader = csv.reader(csvfile)
    coln.append(0)
    for row in csvreader:
        rowsn.append(row)
        print("Appending" + str(row))
    for q in rowsn:
        for r in q:
            print(r, end="        ")
        print("\n")

我希望将整个文件逐行打印在终端上。但是,前 44797 行没有出现在屏幕上。请帮忙。 谢谢。

【问题讨论】:

  • 向上滚动 - 第一行在您的控制台上看不见或没有缓冲,因为它只显示了这么多行......
  • @PatrickArtner 我也这么认为....但是向上滚动后的第一行是第 44,798 行。
  • print("\n") 之后添加break .. 应该只显示第一行
  • @PatrickArtner 我尝试添加 break.....确实显示了第一行....然后我尝试限制 for 循环的重复次数。对于较小的重复,程序按预期工作,但对于大于 4098 的重复开始截断输出的开头。如果我将循环限制为 4099 重复,它将截断第一行的一半。为什么是 4098 阈值?
  • 感谢@PatrickArtner。但是,2^14 实际上是 4096(我之前确实想过,但无法真正解释为什么阈值是 2^14+2)。非常感谢。但是,有什么办法可以克服这个问题吗?

标签: python python-3.x csv append


【解决方案1】:

您可以中断并看到第一行这一事实意味着您的控制台输出滚动得太快。

保存输出的 shell 有大约 4098 行的缓冲区。如果您打印 50k 行,前 (50.000-4098) 行滚动得如此之快,以至于您看不到它们。缓冲区仅保存最后 4098 行,因此您只能向后滚动。

如果您真的想滚动浏览 500k 行,请给自己时间阅读:

for linecount, q in enumerate(rowsn,1):
    for r in q:
        print(r, end="        ")
    print("\n")
    if not linecount % 4000:         # every 4000 lines, ask for return press
        intput("Hit return...")

现在您必须按回车键大约 126 次...或者您可以研究如何扩大控制台的缓冲区 - 对于默认 Windows 控制台,您可以在此处获得更多提示:How to change Screen buffer size in Windows Command Prompt from batch script

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-06
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多