【问题标题】:Python: Delete CSV headers row and rewrite new headers rowPython:删除 CSV 标题行并重写新标题行
【发布时间】:2011-06-25 23:27:10
【问题描述】:

仍在自学python,所以如果我的代码很糟糕,请不要恨我...

我的代码:

ifile = csv.reader(open("TE.csv",'rb'))
shutil.copy("TE.csv","temp")
tempfile = csv.reader(open("temp","rb"))
ofile = csv.writer(open("TE-RESULTS.csv","ab"))

for row in ifile:
    #do some web scraping stuff here

    VC_s = str(cells[1].find(text=True))
    VC_i = str(cells[2].find(text=True))
    VT_s = str(cells[4].find(text=True))

    entry = [VC_s, VC_i, VT_s]

    rowAdd = tempfile.next()
    ofile.writerow(rowAdd + entry)

问题:我从 CSV 开始,我必须在末尾添加 3 列。使用上面的代码,我得到以下输出:

HEADER1     HEADER2    HEADER3   result1   result2   result3
autocheck   C:\check   1.jpg     result1   result2   result3
services    C:\svcs    2.jpg     result1   result2   result3

我的 DESIRED 输出:

HEADER1     HEADER2    HEADER3   HEADER4   HEADER5   HEADER6
autocheck   C:\check   1.jpg     result1   result2   result3
services    C:\svcs    2.jpg     result1   result2   result3

修复我的代码以提供所需输出的最佳方法是什么?我最初的想法是删除 HEADERS 行并将其替换为 TE-RESULTS.csv 文件中的新 HEADERS 行。

【问题讨论】:

    标签: python csv header


    【解决方案1】:

    在 for 循环之前处理标题行。

    rowAdd = tempfile.next()
    ofile.writerow(rowAdd + ['HEADER4', 'HEADER5', 'HEADER6'])
    
    for ...
    

    【讨论】:

    • 谢谢,但现在输出重复每行中的前三个标题。我已经能够通过像这样更改最后一部分来解决这个问题:rowAdd2 = tempfile.next() ofile.writerow(rowAdd2 + entry) 但它给了我一个 StopIteration 错误。我该如何摆脱这个错误?
    • 你是把代码放在答案之前 for循环还是里面?
    • 在循环之前,就像你给出的答案一样。它就在'ifile中的for行:'之前
    • 那时不应该重复标题。而你得到 StopIteration 的原因是因为.....等等,你为什么要复制 TE.csvtemp 然后打开两者,而你应该只使用 row 而不是 rowAdd?跨度>
    • 感谢您的指导。我删除了temp 文件并将它们更改为row 而不是rowAdd。现在完美运行!
    猜你喜欢
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 1970-01-01
    • 2021-05-13
    • 2019-02-12
    相关资源
    最近更新 更多