Python - 在csv文件中查找星号时遇到问题

时间:2018-02-22 10:28:09

标签: python csv header

我试图打开一大堆csv文件并记录标题开始的行。确定标题行的最可靠方法是向下扫描第一列,直到找到" *",然后您知道标题在上面的行上。

文件可能类似于:

Random Text, Random Text, Random Text
Random Text, Random Text, Random Text
Random Text, HEADER, HEADER
*,Values,Values
*,Values,Values
*,Values,Values

我使用以下代码,它通常非常可靠:

with open(f,"r") as csvfile:
    read_rows = csv.reader(csvfile)
    for row in read_rows:
        if row[0]!="*": 
            header_row_number=read_rows.line_num 

e.g。在我之前的例子中,header_row_number将返回值3。

然而,对于某些文件,header_row_number会出现一些完全随机的数字,如294.这与*是一个通配符有什么关系?我无法确定故障文件和有效文件之间的区别。

1 个答案:

答案 0 :(得分:0)

读取此类文件的一种方法是使用itertools中的Python dropwhile函数。这使您可以在开始实际读取数据之前指定要删除行的条件。

from itertools import dropwhile
import csv

f = 'input.csv'

with open(f, "rb") as f_input:
    csv_input = csv.reader(f_input)
    data = list(dropwhile(lambda x: x[0] != '*', csv_input))

print data    

因此,对于您提供的数据,您会看到以下内容:

[['*', 'Values', 'Values'], ['*', 'Values', 'Values'], ['*', 'Values', 'Values']]

在Python 2.x上,您应该以二进制模式打开文件。如果您使用的是Python 3.x,则应使用:

with open(f, 'r', newline='') as f_input: