【问题标题】:Python 2.7: Access database table and CSV file comparisonPython 2.7:Access 数据库表和 CSV 文件比较
【发布时间】:2018-06-12 04:52:47
【问题描述】:

我需要比较.accdb 文件和.csv 文件。

两个文件文件具有相同类型的记录但计数不匹配。所以我想显示那些不常见的记录并将其存储到以; 分隔的新文本文件中,并带有列标题。

.accdb

ID  Name
1   Mak
2   Smith
3   Jack

.csv 文件

ID  Name
1   Mak
2   Smith
3   Jack
4   Johnson
5   Mike

预期的 .txt 文件

ID;  Name
4;   Johnson
5;  Mike

我的尝试

import pyodbc

CSVfile = 'E:\Python\AccessCSVFiles\EMP.csv'
TEXTfile = 'E:\Python\AccessCSVFiles\EMP_UPDATES.txt'

conn_string = r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=E:\Python\AccessCSVFiles\EMP.accdb;'
con = pyodbc.connect(conn_string)
cur = con.cursor()

SQLQuery = 'SELECT * FROM EMP;'
rows = cur.execute(SQLQuery).fetchall()
records = [tuple(map(str,record)) for record in rows]

accessfile = set(records)

with open(CSVfile) as a:
    first_line = a.readline()
    with open(TEXTfile, 'w') as result:
        result.write(first_line)
        for line in a:
            if line not in accessfile:
                print line

但是在文本文件EMP_UPDATES.txt 中,所有 5 条记录都用, 分隔。

【问题讨论】:

    标签: python python-2.7 csv


    【解决方案1】:

    使用DictReader阅读CSV

    import csv
    with open(CSVfile) as csvfile:
        reader = csv.DictReader(csvfile)
        csv_data = {(row['ID'], row['Name']) for row in reader}  # generates set
    

    如果只希望CSV 包含缺失数据:

    diff = sorted(csv_data.difference(accessfile))  # Generated Sorted list with values missing
                                                    # in accessfile
    

    写入新文件:

    with open(TEXTfile, 'w') as result:
        for missing in diff:
            result.write(";".join(missing))
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      相关资源
      最近更新 更多