首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用csv.DictWriter跳过空单元格

如何使用csv.DictWriter跳过空单元格
EN

Stack Overflow用户
提问于 2021-06-18 19:15:38
回答 1查看 24关注 0票数 1

我正在尝试匿名CSV中的数据,但是,我只想对非空的单元格执行此操作。目前,我的程序将匿名数据添加到具有给定行的所有单元格。

如何跳过清空空单元格?下面是我的程序

代码语言:javascript
复制
import csv
from faker import Faker
from collections import defaultdict



def anonymize():
    "Anonymizes the given original data to anonymized form"
    faker = Faker()

    names = defaultdict(faker.name)
    emails = defaultdict(faker.email)

    with open(filename, "r") as f:
        with open(f"{filename}-anonymized_data.csv", "w") as o:
            reader = csv.DictReader(f)
            writer = csv.DictWriter(o, reader.fieldnames)
            writer.writeheader()
            for row in reader:
                    row["adult_First_Name"] = names[
                        row["adult_First_Name"]
                    ]
                    row["child_First_Name"] = names[
                        row["child_First_Name"]
                    ]
                    row["Adult - EMAIL ADDRESS"] = emails[row["Adult - EMAIL ADDRESS"]]
                    row["Parent - EMAIL ADDRESS"] = emails[row["Parent - EMAIL ADDRESS"]]
                    writer.writerow(row)


if __name__ == "__main__":
    anonymize()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-18 20:44:47

您可以在应用假值之前测试每个字段。一种更简单的方法是将需要更改的字段存储在fields列表中,以及在需要时应用哪个伪造函数:

代码语言:javascript
复制
import csv
from faker import Faker

def anonymize():
    "Anonymizes the given original data to anonymized form"
    faker = Faker()

    fields = [
        ("adult_First_Name", faker.name),
        ("child_First_Name", faker.name),
        ("Adult - EMAIL ADDRESS", faker.email),
        ("Parent - EMAIL ADDRESS", faker.email),
    ]

    with open(filename, "r") as f:
        with open(f"{filename}-anonymized_data.csv", "w", newline="") as o:
            reader = csv.DictReader(f)
            writer = csv.DictWriter(o, reader.fieldnames)
            writer.writeheader()
            
            for row in reader:
                for field, fake in fields:
                    if row[field]:
                        row[field] = fake()
                
                writer.writerow(row)

    
if __name__ == "__main__":
    anonymize()

添加newline=''会在输出中停止多余的空行。

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

https://stackoverflow.com/questions/68034190

复制
相关文章

相似问题

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