我试图打开一大堆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.这与*是一个通配符有什么关系?我无法确定故障文件和有效文件之间的区别。
答案 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: