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

我编写了一个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 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)