2017-02-21 41 views
0

我有一个问题,我需要吸取不同的文件,不同的列位置。一个文件列可能开始向下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个字符串列。

+0

您的'if'和'else'语句执行相同的代码。 – PrestonH

回答

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 
-1

根据您的文章的规格,此代码的工作。它返回具有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) 
+0

对于Python 2或3,您并未正确打开csv文件。查看文档中的示例。 – martineau

+0

您可能还需要'headers.append(row)'语句后面的'break'。另外,由于这不在函数中,最后的'return headers'是一个错误。 – martineau

+0

@Martineau只要一条线满足标题行的标准,就可以添加“break”。该代码将在关于文件OP的类型正在使用的基本假设下达到相同的结果。就'csv'模块而言,我没有看到这是不正确的。查看[此链接]下的第一个示例(https://docs.python.org/2/library/csv.html#module-contents)。我注意到的唯一直接的事情就是'quotechar'可选参数。我编辑了“return”部分来打印,但信任OP知道如何处理这部分。 – PrestonH

相关问题