【问题标题】:How can I use python to read only a certain range of lines in a .csv?如何使用 python 仅读取 .csv 中特定范围的行?
【发布时间】:2021-08-22 00:52:22
【问题描述】:

我正在尝试处理一个巨大的 .csv 文件,但我不需要前约 900000 行数据。这就是我最初试图摆脱那块数据的方式,但它使程序需要很长时间才能完成。有没有更直接的方法可以做到这一点,我什至一开始都不读取前 900000 行?

firstColumn = [ ]
secondColumn = [ ]
thirdColumn = [ ]

readFile  = input("Enter name of file to be read: ")

with open(readFile,'r') as readFile:

    for eachline in readFile:                               # converting columns to lists
        parts = eachline.strip('\n').split(',')
        firstColumn.append(parts[0])
        secondColumn.append(parts[1])
        thirdColumn.append(parts[2])    
    
for j in range(900000):                          # nothing happens for these datapoints
    del firstColumn[j]
    del secondColumn[j]
    del thirdColumn[j]

【问题讨论】:

  • 与 Spyder IDE 有什么关系?请只添加相关标签。

标签: python loops csv spyder


【解决方案1】:

你是对的;这是可怕。转换您不打算使用的 900K 行输入是愚蠢的。相反,完全跳过它们:

# read past first 900K lines
with open(readFile,'r') as readFile:
    for _ in range(900000):
        readFile.readline()

    for eachline in readFile:                               # converting columns to lists
        # Continue as before

完成后,我强烈建议您切换到 csv 阅读器以获取文件的其余部分;您可以从那里通过简单的操作构建您的数据框。请注意不要关闭并重新打开文件,否则会重置文件头信息。

【讨论】:

    【解决方案2】:

    您可以通过执行以下操作跳过初始行:

    with open(readFile, 'r') as f:
        # skip first 900,000 lines
        for _ in range(900000):
            next(f)
        for line in f:
            parts = line.strip('\n').split(',')
            firstColumn.append(parts[0])
            secondColumn.append(parts[1])
            thirdColumn.append(parts[2])
    

    【讨论】:

      【解决方案3】:

      您可以使用 pandas 来制作副本 .csv 文件,并在副本中消除这些行。首先为您的文件创建一个数据框,然后您可以使用 .iloc[] 将行索引放入您想要开始的位置。这将在您要剪切的行之后。像字符串一样解析它。

      【讨论】:

      • 似乎更像是一条评论
      猜你喜欢
      • 2015-06-22
      • 2018-09-10
      • 2019-05-12
      • 2022-01-21
      • 2012-06-24
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多