我编写了一个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],)
join操作的工作原理如下,但我的问题是我想从连接的csv中删除表2中的某些字段(例如XID)。有一个简单的方法吗?
我之前的解决方案是使用Pandas
,但脚本应该在我不想(不能)安装导入依赖项的服务器上运行。
答案 0 :(得分:1)
如果你想取出一些东西,你可以使用列表理解来放入一个简单的过滤器。
您可以在此处创建列表。
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)