使用 Python 编辑 csv 文件时跳过标题 [英] Skip the headers when editing a csv file using Python

查看:52
本文介绍了使用 Python 编辑 csv 文件时跳过标题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用下面引用的代码来使用 Python 编辑 csv.代码中调用的函数构成了代码的上半部分.

I am using below referred code to edit a csv using Python. Functions called in the code form upper part of the code.

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

Problem: I want the below referred code to start editing the csv from 2nd row, I want it to exclude 1st row which contains headers. Right now it is applying the functions on 1st row only and my header row is getting changed.

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()

我试图通过将 row 变量初始化为 1 来解决这个问题,但是没有用.

I tried to solve this problem by initializing row variable to 1 but it didn't work.

请帮我解决这个问题.

推荐答案

你的 reader 变量是一个可迭代的,通过循环你可以检索行.

Your reader variable is an iterable, by looping over it you retrieve the rows.

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

To make it skip one item before your loop, simply call next(reader, None) and ignore the return value.

你也可以稍微简化你的代码;使用打开的文件作为上下文管理器来自动关闭它们:

You can also simplify your code a little; use the opened files as context managers to have them closed automatically:

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():

If you wanted to write the header to the output file unprocessed, that's easy too, pass the output of next() to writer.writerow():

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

这篇关于使用 Python 编辑 csv 文件时跳过标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆