gpt4 book ai didi

python - 只读定义的 CSV 列

转载 作者:太空宇宙 更新时间:2023-11-04 04:47:41 26 4
gpt4 key购买 nike

我写了一个 python 程序,根据匹配的键连接 2 个 csv 表。

我的数据是这样的:

表 1:

 ID;NAME;ADRESS;TEL
1; Lee; Str.; 12345
2; Chu; Blv.; 34567

表 2:

 AID; FID; XID
50 1 99
676 2 678

我的代码是这样的:

data = OrderedDict()
fieldnames = []

with open(join_file, "rt") as fp:
reader = csv.DictReader(fp, dialect=excel_semicolon)
fieldsB = reader.fieldnames
fieldnames.extend(fieldsB)
for row in reader:
data.setdefault(row["FID"], {}).update(row)

with open(fileA, "rt") as fp:
reader = csv.DictReader(fp, dialect=excel_semicolon)
fieldnames.extend(reader.fieldnames)
for row in reader:
data.setdefault(row["ID"], {}).update(row)

fieldnames = list(OrderedDict.fromkeys(fieldnames))

with open("merged2.csv", "wt", newline='') as fp:
writer = csv.writer(fp, dialect=excel_semicolon)
writer.writerow(fieldnames)
for row in data.values():
writer.writerow([row.get(field, '') for field in fieldnames],)

连接操作是这样工作的,但我的问题是我想从连接的 csv 中删除表 2 中的某些字段(例如 XID)。有没有简单的方法可以做到这一点?

我之前的解决方案是使用 Pandas,但脚本应该在我不想(不能)安装导入依赖项的服务器上运行。

最佳答案

如果你想删除一些东西,你可以使用列表理解放入一个简单的过滤器。

您在此处创建列表。

fieldnames = list(OrderedDict.fromkeys(fieldnames))

过滤掉你不想要的。

filtered_fieldnames = [x for x in fieldnames if x != 'XID']

然后将新的文件数据更改为过滤后的列表。

with open("merged2.csv", "wt", newline='') as fp:
writer = csv.writer(fp)
writer.writerow(filtered_fieldnames)
for row in data.values():
writer.writerow([row.get(field, '') for field in filtered_fieldnames],)

您可以将它包装在一个函数中,并在您创建新文件或希望取出某些内容时调用它。

def create_merged_file(names):

with open("merged2.csv", "wt", newline='') as fp:
writer = csv.writer(fp)
writer.writerow(names)
for row in data.values():
writer.writerow([row.get(field, '') for field in names],)

create_merged_file(fieldnames)

filtered_fieldnames = [x for x in fieldnames if x != 'XID']

create_merged_file(filtered_fieldnames)

关于python - 只读定义的 CSV 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49141222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com