如何使用Python的内置.csv编写器模块替换列?

ign*_*lut 1 python csv file-io

我需要在一个巨大的Excel .csv文件中进行查找和替换(特定于一列URL).由于我正处于尝试自学脚本语言的开始阶段,我想我会尝试在python中实现该解决方案.

我在解决方案的"替换"部分遇到了麻烦.我已经阅读了关于如何使用编写器官方csv模块文档,但对我来说还没有一个足够清晰的例子(是的,我很慢).那么,现在问题是:如何使用writer对象迭代csv文件的行?

ps为笨拙的代码提前道歉,我还在学习:)

import csv

csvfile = open("PALTemplateData.csv")
csvout = open("PALTemplateDataOUT.csv")
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader = csv.reader(csvfile, dialect)
writer = csv.writer(csvout, dialect)

total=0;
needchange=0;
changed = 0;
temp = ''
changeList = []

for row in reader:
    total=total+1
    temp = row[len(row)-1]
    if '/?' in temp:
        needchange=needchange+1;
        changeList.append(row.index)

for row in writer:           #this doesn't compile, hence the question
    if row.index in changeList:
        changed=changed+1
        temp = row[len(row)-1]
        temp.replace('/?', '?')
        row[len(row)-1] = temp
        writer.writerow(row)

print('Total URLs:', total)
print('Total URLs to change:', needchange)
print('Total URLs changed:', changed)
Run Code Online (Sandbox Code Playgroud)

Dav*_*d Z 6

您收到错误的原因是编写器没有要迭代的数据.你应该给它数据 - 大概是,你有某种列表或生成器可以产生要写出的行.

我建议只结合两个循环,如下:

for row in reader:
    row[-1] = row[-1].replace('/?', '?')
    writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)

有了这样的,你甚至都不需要total,needchangechangeList.(有很多优化,我很遗憾没有时间解释,但我会看看我是否可以在以后编辑该信息)