Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7:Access数据库表和CSV文件比较_Python_Python 2.7_Csv - Fatal编程技术网

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))