首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Python编辑csv文件时跳过标题

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

Stack Overflow用户
提问于 2013-01-10 19:54:38
回答 5查看 329K关注 0票数 261

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

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

代码语言:javascript
复制
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来解决这个问题,但它不起作用。

请帮我解决这个问题。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-10 20:07:54

您的reader变量是一个可迭代变量,通过循环遍历它可以检索行。

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

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

代码语言:javascript
复制
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()

代码语言:javascript
复制
headers = next(reader, None)  # returns the headers or `None` if the input is empty
if headers:
    writer.writerow(headers)
票数 444
EN

Stack Overflow用户

发布于 2015-03-20 07:37:41

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

给定"foo.csv“如下:

代码语言:javascript
复制
FirstColumn,SecondColumn
asdf,1234
qwer,5678

像这样使用DictReader:

代码语言:javascript
复制
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'])
票数 141
EN

Stack Overflow用户

发布于 2013-01-10 20:06:25

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

您希望执行next(reader)来跳过一行。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14257373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档