如何使用csv模块将列中的空值替换为其上一行的值?

2024-06-09 20:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python中的CSV模块,并尝试用上一行中的值填充特定列中的空白值 我可以在excel中完成这项工作,但我想在cronjob上运行这个程序,所以我正试图找出如何用python实现它

例如

{AAA,BBB,CCC},{DDD,EEE},{FFF,GGG,HHH},{III,JJJ},{KKK,all,LLL},{MMM,NNN,OOO}}

应该变成

{AAA,BBB,CCC},{DDD,BBB,EEE},{FFF,GGG,HHH},{III,GGG,JJJ},{KKK,GGG,LLL},{MMM,NNN,OOO}}

谢谢你的帮助和建议


Tags: fffiiibbbcccmmmdddaaahhh
1条回答
网友
1楼 · 发布于 2024-06-09 20:28:57

我认为可以通过将前一行保存在变量中,并使用其值替换下一行中的任何空字符串来完成此操作:

with open(in_filename, newline="") as f_in, open(out_filename, "w", newline="") as f_out:
    reader = csv.reader(f_in)    # setup code
    writer = csv.writer(f_out)

    row = next(reader)           # handle first line (with no replacements)
    writer.writerow(row)
    last_row = row               # always save the last row of data that we've written

    for row in reader:           # loop over the rest of the lines
        row = [x if x else y for x, y in zip(row, last_row)]  # replace empty strings
        writer.writerow(row)
        last_row = row

此代码假定,如果同一列中的多个连续行中有空白项(不仅替换第一个),您希望继续使用相同的前一个值。如果第一行中有空值,则不会替换它们。在

我还使用python3中的一个新参数来open来获得csv模块兼容的文件对象。如果使用的是python2,则需要以稍微不同的方式打开文件。如果是这种情况,请以二进制模式(模式"rb""wb")打开这两个文件,并去掉newline关键字参数。在

如果默认值不适用于您的文件,您可能还需要传入参数csv.readercsv.writer来描述您特定的CSV方言(例如分隔符、引号样式等)。在

相关问题 更多 >