使用Python编辑csv文件时跳过标题

我正在使用下面提到的代码来编辑使用Python的CSV。 在代码中调用的函数形成代码的上半部分。

问题:我希望下面的代码从第二行开始编辑csv,我希望它排除包含标题的第一行。 现在它只在第一行应用函数,我的标题行正在改变。

in_file = open("tmob_notcleaned.csv", "rb") reader = csv.reader(in_file) out_file = open("tmob_cleaned.csv", "wb") writer = csv.writer(out_file) row = 1 for row in reader: row[13] = handle_color(row[10])[1].replace(" - ","").strip() row[10] = handle_color(row[10])[0].replace("-","").replace("(","").replace(")","").strip() row[14] = handle_gb(row[10])[1].replace("-","").replace(" ","").replace("GB","").strip() row[10] = handle_gb(row[10])[0].strip() row[9] = handle_oem(row[10])[1].replace("Blackberry","RIM").replace("TMobile","T-Mobile").strip() row[15] = handle_addon(row[10])[1].strip() row[10] = handle_addon(row[10])[0].replace(" by","").replace("FREE","").strip() writer.writerow(row) in_file.close() out_file.close() 

我试图通过初始化rowvariables来解决这个问题,但它没有工作。

请帮我解决这个问题。

您的readervariables是一个可迭代的,通过循环它可以检索行。

要在循环之前跳过一个项目,只需调用next(reader, None)并忽略返回值。

你也可以简化你的代码。 使用打开的文件作为上下文pipe理器使其自动closures:

 with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile: reader = csv.reader(infile) next(reader, None) # skip the headers writer = csv.writer(outfile) for row in reader: # process each row writer.writerow(row) # no need to close, the files are closed automatically when you get to this point. 

如果您想将头文件写入未处理的输出文件,那很简单,将next()的输出传递给writer.writerow()

 headers = next(reader, None) # returns the headers or `None` if the input is empty if headers: writer.writerow(headers) 

解决这个问题的另一种方法是使用DictReader类,该类可以“跳过”标题行并使用它来允许命名索引。

给定“foo.csv”如下:

 FirstColumn,SecondColumn asdf,1234 qwer,5678 

像这样使用DictReader:

 import csv with open('foo.csv') as f: reader = csv.DictReader(f, delimiter=',') for row in reader: print(row['FirstColumn']) # Access by column header instead of column number print(row['SecondColumn']) 

row=1不会改变任何东西,因为你会用循环的结果覆盖它。

你想做next(reader)跳过一行。