2017-02-01 3 views
0

Я пишу скрипт python для сравнения файлов csv. Однако это работает только через запятую, даже если разделитель установлен в \ т ...Что не хватает, чтобы сравнить этот скрипт csv-файлы с разделителями табуляции?

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 

Edit:

Тестовый пример 1 ...

MFile:

a,1 
a,2 

CFile:

x,2 
x,z 

с d = ''

читает обе колонки и возвращает 1 матч с Т 4.

тестовый пример 2 ...

MFile:

a 1 
a 2 

CFile:

x 2 
x z 

с d = '\ t'

читает столбец 1 возвращается 0 спичек с Т 2.

Edit: Использование ПРЕДОСТАВИЛИ работает и принял ответ:

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 
+2

Вы должны показать нам, где установлен 'd'. Также: что значит «не работает» в вашем случае? Вызывает ли ошибка или говорит, что файлы отличаются друг от друга, когда они идентичны? – Mikk

+0

Извините, я добавил, как устанавливается d, либо 'd = '\ t'', либо' d =', ''и тестовые примеры с результатами. – Wafer

ответ

1

Вы можете использовать csv.Sniffer, чтобы получить ваш диалект csv file:

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) 
Смежные вопросы