Python CSV的只读定义列
我编写了一个python程序,它根据匹配的键连接两个csv表 我的数据如下所示:Python CSV的只读定义列,python,csv,data-structures,Python,Csv,Data Structures,我编写了一个python程序,它根据匹配的键连接两个csv表 我的数据如下所示: data = OrderedDict() fieldnames = [] with open(join_file, "rt") as fp: reader = csv.DictReader(fp, dialect=excel_semicolon) fieldsB = reader.fieldnames fieldnames.extend(fieldsB) for r
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],)
表1:
ID;名称地址;电话
1.李;Str。;12345
2.楚;Blv。;34567
表2:
AID;氢火焰离子化检测器;西德
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(例如XID)中删除表2中的某些字段。有没有一个简单的方法可以做到这一点
在此之前,我的解决方案是使用
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)