处理CSV数据时如何忽略第一行数据?

新手上路,请多包涵

我要求 Python 打印 CSV 数据列中的最小数字,但最上面的行是列号,我不希望 Python 将最上面的行考虑在内。我怎样才能确保 Python 忽略第一行?

这是到目前为止的代码:

 import csv

with open('all16.csv', 'rb') as inf:
    incsv = csv.reader(inf)
    column = 1
    datatype = float
    data = (datatype(column) for row in incsv)
    least_value = min(data)

print least_value

你能解释一下你在做什么,而不仅仅是给出代码吗?我对 Python 非常陌生,想确保我理解所有内容。

原文由 user1496646 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 539
2 个回答

您可以使用 csv 模块的 Sniffer 类的实例来推断 CSV 文件的格式并检测标题行是否与内置 next() 仅在必要时跳过第一行的功能:

 import csv

with open('all16.csv', 'r', newline='') as file:
    has_header = csv.Sniffer().has_header(file.read(1024))
    file.seek(0)  # Rewind.
    reader = csv.reader(file)
    if has_header:
        next(reader)  # Skip header row.
    column = 1
    datatype = float
    data = (datatype(row[column]) for row in reader)
    least_value = min(data)

print(least_value)

由于 datatypecolumn 在您的示例中是硬编码的,因此处理 row :75— 会稍微快一些

    data = (float(row[1]) for row in reader)

注意: 以上代码适用于 Python 3.x。对于 Python 2.x,使用以下行打开文件而不是显示的内容:

 with open('all16.csv', 'rb') as file:

原文由 martineau 发布,翻译遵循 CC BY-SA 4.0 许可协议

要跳过第一行,只需调用:

 next(inf)

Python 中的文件是行上的迭代器。

原文由 jfs 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题