Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在文件夹中找到各种类型的csv文件的列标题?_Python_Python 2.7_Python 3.x_Csv - Fatal编程技术网

Python 如何在文件夹中找到各种类型的csv文件的列标题?

Python 如何在文件夹中找到各种类型的csv文件的列标题?,python,python-2.7,python-3.x,csv,Python,Python 2.7,Python 3.x,Csv,我有一个问题,我需要采用不同的文件,不同的列位置。一个文件列可能从下4行开始,而另一个文件列可能从第一行开始 一个文件可能如下所示: 这个 是 A. 第1栏、第2栏、第3栏、第4栏 另一个可能在第1行有如下列: 第1列、第2列、第3列 我需要得到每个文件列标题的列表。我认为列标题大于3个条目。如果我使用的是csv模块,我该如何编写 我有点像: temprow = next(csvfile) for value in temprow: if value == '':

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

一个文件可能如下所示:

这个
是
A.
第1栏、第2栏、第3栏、第4栏
另一个可能在第1行有如下列:

第1列、第2列、第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个字符串的列

试试这个:

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

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


您的
if
else
语句执行相同的代码。您没有正确打开Python 2或Python 3的csv文件。查看文档中的示例。您可能还需要在
headers.append(row)
语句后面加一个
break
。此外,由于这不在函数中,因此末尾的
返回标题
是一个错误。@Martineau只要只有一行满足标题行的条件,就不需要
中断
,但可以添加。在对OP使用的文件类型进行基本假设的情况下,代码将获得相同的结果。对于
csv
模块,我看不出这是怎么回事。请参见下面的第一个示例。我注意到的唯一直接的事情是
quotechar
可选参数。我编辑了要打印的
return
部分,但trust OP知道如何处理此部分。标题行后面的所有行极有可能都符合条件,请仔细想想。至于打开文件,您链接到的Python 2文档显示了以二进制模式打开的文件,
'rb'
,这不是您的答案。在Python3中,使用
newline=''
关键字参数显示打开的文件,这是必需的,因为在该版本的Python中,字符串默认为Unicode…继续…为了通用性,硬编码长度为4也可能不起作用,除非所有文件至少有那么多列。
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)