Python 如何在文件夹中找到各种类型的csv文件的列标题?
我有一个问题,我需要采用不同的文件,不同的列位置。一个文件列可能从下4行开始,而另一个文件列可能从第一行开始 一个文件可能如下所示: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 == '':
这个
是
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)