如何在文件夹中找到各种类型csv文件的列标题?
我有一个问题,我需要吸取不同的文件,不同的列位置。一个文件列可能开始向下4行,而另一个文件列可能从第一行开始。如何在文件夹中找到各种类型csv文件的列标题?
一个文件可能是这样的:
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个字符串列。
试试这个:
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
根据您的文章的规格,此代码的工作。它返回具有4个或更多元素('大于3个项目')的.csv文件中的第一行。
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文件。查看文档中的示例。 – martineau
您可能还需要'headers.append(row)'语句后面的'break'。另外,由于这不在函数中,最后的'return headers'是一个错误。 – martineau
@Martineau只要一条线满足标题行的标准,就可以添加“break”。该代码将在关于文件OP的类型正在使用的基本假设下达到相同的结果。就'csv'模块而言,我没有看到这是不正确的。查看[此链接]下的第一个示例(https://docs.python.org/2/library/csv.html#module-contents)。我注意到的唯一直接的事情就是'quotechar'可选参数。我编辑了“return”部分来打印,但信任OP知道如何处理这部分。 – PrestonH
您的'if'和'else'语句执行相同的代码。 – PrestonH