【问题标题】:How do I find the column headers of various types of csv files in a folder?如何在文件夹中找到各种类型的csv文件的列标题?
【发布时间】:2017-02-21 16:45:22
【问题描述】:

我有一个问题,我需要使用不同的列位置接收不同的文件。一个文件列可能开始向下 4 行,而另一个文件列可能从第一行开始。

一个文件可能如下所示:

This
is
a
column 1, column 2, column 3, column 4

另一个可能在第 1 行有这样的列:

column 1, column 2, column 3

我需要获取每个文件列标题的列表。我认为列标题是大于 3 项的列表。如果我使用的是 csv 模块,我该怎么写?

我有类似的东西:

temprow = next(csvfile)

for value in temprow:
    if value == '':
        temprow = next(csvfile)
    if len(value) > 3:
        header = temprow
    else:
        header = temprow

这不太有效,因为它还返回包含 1 个字符串的列。

【问题讨论】:

  • 您的ifelse 语句执行相同的代码。

标签: python python-2.7 python-3.x csv


【解决方案1】:

试试这个:

with open('yourfile.csv', 'r') as f:
    for line in f:                        # iterate for each line
        if "," in line:                   # the header line should contain comma     
            header = line          
            break                         # break the loop when header line is found

print(header)

输出:

column 1, column 2, column 3, column 4

【讨论】:

    【解决方案2】:

    根据您帖子中的规范,此代码有效。它返回 .csv 文件中包含 4 个或更多元素(“大于 3 个项目”)的第一行。

    headers = []                                        # Column names will be appended to this list
    files = ['./test']                                  # Insert files here
    
    for f in files:                                     # Loop over files
        with open(f, 'r') as fh:                        # Open file
            reader = csv.reader(fh, delimiter = ',')    # Create reader
            for row in reader:                          # Loop over rows
                if len(row) >= 4:                       # Criteria for appending to headers
                    headers.append(row)
    

    【讨论】:

    • 您没有为 Python 2 或 3 正确打开 csv 文件。请查看文档中的示例。
    • 您可能还需要在headers.append(row) 语句之后添加break。另外,由于 this 不在函数中,所以末尾的 return headers 是错误的。
    • @Martineau break 不需要,只要只有一行满足作为标题行的标准,但可以添加。在关于 OP 正在使用的文件类型的基本假设下,该代码将获得相同的结果。就csv 模块而言,我看不出这是怎么回事。请参阅this link 下的第一个示例。我唯一注意到的是quotechar 可选参数。我已经编辑了 return 部分来打印,但相信 OP 知道如何处理这部分。
    • 标题行后面的所有行很可能满足条件——想想吧。至于打开文件,您链接的 Python 2 文档显示正在以二进制模式打开文件以供读取,'rb',这不是您的答案。在 Python 3 中,documentation 显示正在打开的文件以使用 newline='' 关键字参数进行读取,这是必需的,因为在该版本的 Python 字符串中默认为 Unicode...继续
    • ...一般来说,硬编码长度为 4 也可能行不通,除非所有文件都至少有那么多列。
    猜你喜欢
    • 2019-05-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多