Python 2.7: Доступ к таблице базы данных и сравнение файлов CSV - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно сравнить файл .accdb с файлом .csv.

Оба файла имеют одинаковый тип записей с несовпадением счетчиков.Поэтому я хочу отобразить те записи, которые встречаются редко, и сохранить их в новый текстовый файл, разделенный ; с заголовком столбца.

.accdb :

ID  Name
1   Mak
2   Smith
3   Jack

.csv File :

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

Но все 5 записей разделяются с помощью , в текстовом файле EMP_UPDATES.txt.

1 Ответ

0 голосов
/ 12 июня 2018

используйте 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...