Python 2.7:Access数据库表和CSV文件比较
我需要将Python 2.7:Access数据库表和CSV文件比较,python,python-2.7,csv,Python,Python 2.7,Csv,我需要将.accdb文件与.csv文件进行比较 两个文件具有相同类型的记录,但计数不匹配。所以我想显示那些不常见的记录,并将其存储到用分隔的新文本文件中 .accdb: ID Name 1 Mak 2 Smith 3 Jack .csv文件: ID Name 1 Mak 2 Smith 3 Jack 4 Johnson 5 Mike ID; Name 4; Johnson 5; Mike import pyodbc CSVfile = 'E:\
.accdb
文件与.csv
文件进行比较
两个文件具有相同类型的记录,但计数不匹配。所以我想显示那些不常见的记录,并将其存储到用分隔的新文本文件中带有列标题的代码>
.accdb:
ID Name
1 Mak
2 Smith
3 Jack
.csv文件:
ID Name
1 Mak
2 Smith
3 Jack
4 Johnson
5 Mike
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
所需的.txt文件:
ID Name
1 Mak
2 Smith
3 Jack
4 Johnson
5 Mike
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
我的尝试:
ID Name
1 Mak
2 Smith
3 Jack
4 Johnson
5 Mike
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条记录,并用,
分隔 用于读取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))