这个脚本比较制表符分隔的 csv 文件缺少什么?

What's missing to have this script compare tab delimited csv files?

我正在编写一个 python 脚本来比较 csv 文件。但是它只适用于逗号分隔,即使分隔符设置为 \t...

d='\t'

for x in range(0, columns):
    with open(mfile, 'rb') as master:       
        with open(cfile, 'rb') as check:
            master_indices = dict((r[x], i) for i, r in enumerate(csv.reader(master, delimiter=d))) 
            check_reader = csv.reader(check, delimiter=d)

            for row in check_reader:
                index = master_indices.get(row[x])

                if index is not None:
                    T += 1
                    matches += 1
                else:
                    T += 1

编辑:

测试用例 1...

m文件:

a,1
a,2

c文件:

x,2
x,z

with d=','

读取两列并且 returns 1 匹配 T of 4.

测试用例 2...

m文件:

a    1
a    2

c文件:

x    2
x    z

with d='\t'

读取第 1 列 returns 0 与 T of 2 匹配。

编辑:使用提供的、有效的和接受的答案:

for x in range(0, columns):
    with open(mfile, 'rb') as master:
        dialect = csv.Sniffer().sniff(master.read(1024))
        master.seek(0)
        master_reader = csv.reader(master, dialect)

        with open(cfile, 'rb') as check:
            dialect = csv.Sniffer().sniff(check.read(1024))
            check.seek(0)
            check_reader = csv.reader(check, dialect)

            master_indices = dict((r[x], i) for i, r in enumerate(master_reader)) 

            for row in check_reader:
                index = master_indices.get(row[x])

                if index is not None:
                    T += 1
                    matches += 1
                else:
                    T += 1

您可以使用 csv.Sniffer 获取 csv 文件的方言:

with open(mfile, 'rb') as master:
    dialect = csv.Sniffer().sniff(master.read(1024))
    master.seek(0)
    master_reader = csv.reader(master, dialect)

    with open(cfile, 'rb') as check:
        dialect = csv.Sniffer().sniff(check.read(1024))
        check.seek(0)
        check_reader = csv.reader(check, dialect)