当前位置: 首页 > 知识库问答 >
问题:

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

宋铭
2023-03-14

我使用下面提到的代码使用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()

我试图通过将row变量初始化为1来解决这个问题,但它不起作用。

请帮助我解决这个问题。

共有3个答案

索令
2023-03-14

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

您想执行next(reader)跳过一行。

孟英光
2023-03-14

解决这个问题的另一种方法是使用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'])
厍浩广
2023-03-14

reader变量是一个iterable,通过循环它可以检索行。

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

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

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)
 类似资料:
  • 问题内容: 我正在使用下面引用的代码使用Python编辑CSV。代码中调用的函数构成了代码的上部。 问题:我希望下面引用的代码从第二行开始编辑csv,我希望它排除包含标题的第一行。现在,它仅在第一行上应用函数,并且我的标题行正在更改。 我试图通过将变量初始化为来解决此问题,但没有成功。 请帮助我解决这个问题。 问题答案: 您的变量是可迭代的,通过循环它可以检索行。 要使其在循环前跳过一项,只需调用

  • 问题内容: 这是我的代码,我能够打印每行,但是当出现空白行时,它会打印;由于CSV文件格式,因此当空白行出现时我想跳过 问题答案: 如果要跳过所有空格行,则应使用以下测试:。 由于您可能需要做的事情不只是将非空白行打印到控制台上(不需要使用CSV模块),因此这里是一个涉及DictReader的示例:

  • 我正在使用JMeter运行API负载测试。其中我使用一个CSV文件来传递数据。 应用程序接口: CSV(共赢): CSV 文件 : 问题:JMeter 总是选择具有 isexternal = true 的行,并跳过所有具有 isexternal 作为 false 的行。这是我面临的奇怪行为。任何人都可以解释一下背后的原因吗?

  • 问题内容: 我开始设计一个程序,该程序将基于已找到并保存到主CSV / Excel文件中的相似字符串及其标识,自动执行正确地查找和识别字符串的过程。 现在,我想适当地设计它,这样以后在实现CSV / Excel阅读写作部分时就不会遇到问题。 我可能会使用OpenCSV来读写文件,所以我的问题更多是关于如何编辑文件。 上次处理编辑CSV文件时,我不得不将每行重写为新文件或现有文件,而不仅仅是编辑特定

  • 问题内容: 我真的是Python新手。我目前正在研究使用python创建HTML文件的任务。我了解如何将HTML文件读入python,然后进行编辑和保存。 上一部分的问题在于,它只是替换了整个HTML文件并将字符串放入write()中。如何编辑文件,同时保持其内容完整。我的意思是,写这样的东西,但在 体内标签 我需要自动在打开和关闭正文标签之间插入链接。 问题答案: 您可能想阅读Beautiful

  • 问题内容: 我有一个笨拙的csv文件,我需要跳过第一行来阅读它。 我正在使用python / pandas轻松做到这一点 但是我不知道如何在Go中做到这一点。 错误: : 问题答案: 读取csv文件时跳过第一行 例如, 输出: