【问题标题】:Stop reading the CSV file after finding empty rows python找到空行python后停止读取CSV文件
【发布时间】:2020-08-15 18:10:09
【问题描述】:

我正在尝试读取一个 CSV 文件,该文件在同一页面上有四个部分,但通过在电子表格中间放置一些空行来区分。我想以某种方式要求熊猫在找到空行后立即停止读取文件的其余部分。

编辑:我需要详细说明问题。我有一个 CSV 文件,它有 4 个不同的部分,用 3-4 个空行分隔。我需要提取这些部分中的每一个,或者至少提取第一部分。换句话说,我希望 read_csv 在找到第一个空行时停止(当然是在跳过包含文件详细信息的行之后)

url = urlopen("https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/ftp/30_Industry_Portfolios_CSV.zip")

zipfile = ZipFile(BytesIO(url.read()))
data = pd.read_csv(zipfile.open('30_Industry_Portfolios.CSV'), 
                     header = 0, index_col=0,
                     skiprows=11,parse_dates=True)

【问题讨论】:

标签: python-3.x pandas csv


【解决方案1】:

你可以使用生成器。

假设csv module 正在生成行。 (我们可能会使用yield from sheet, 除了我们稍后会更改循环。)

import csv

def get_rows(csv_fspec, skip_rows=12):
    with open(csv_fspec) as fin:
        sheet = csv.reader(fin)
        for _ in range(skip_rows):
            next(sheet)  # discard initial rows
        for row in sheet:
            yield row

df = pd.DataFrame(get_rows(my_csv))

现在您想在遇到某些条件后忽略行, 也许在初始列为空之后。 好了,这很简单,只要改变循环体:

        for row in sheet:
            if row[0]:
                yield row
            else:
                break  # Ignore rest of input file.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 1970-01-01
    相关资源
    最近更新 更多