2012-06-01 4 views
0

У меня есть два файла со следующим содержимым ниже. Мой вопрос: приведенный ниже код , если id совпадает с файлом 1 и file2, то как сопоставить второй столбец в файле1 и соответствующий второй столбец в file2 до п столбцов ..Соответствующие столбцы массива в python

def process(file): 
    pt = [] 
    f=open(file) 
    for l in f: 
     parts=l.strip().split('\t') 
     if len(parts) < 3: 
      print 'error with either ur input file or field check parts' 
      break 
     else: 
      pt.append(parts) 
    return pt 
    arr1 = process(file1) 
    arr2 = process(file2)     
    for arr in arr1: 
    if arr[0] in arr2: 
     //then match arr1[1] with arr2[1] and so on and get the results 

file1:

ID674097256 voice tech department 
ID674097257 NA NA 
ID674097399 chat order processing department 

file2:

ID674097212 voice tech department 
ID674097257 NA NA 
ID674097399 chat new processing department 
+0

какой ур размер файла данных? строка данных с некоторым порядком? – fanlix

+0

Ожидаемый результат не совсем ясен для меня. Не могли бы вы более подробно объяснить, что должна выводить программа (учитывая, что файлы file1 и file2 являются входами)? –

ответ

0

использование zip

for (a1, a2) in zip(arr1, arr2): 
    if a1[0] == a2[0]: 
     ## do something. 
+0

Это была моя первая мысль, но, посмотрев код OP, я пришел к выводу, что OP хочет искать каждый ID во всем файле, а не только на линии с тем же номером. Если я ошибаюсь, использование 'zip' - хорошая идея. –

0

Вопрос не совсем понятно для меня, но я думаю, что вы пытаетесь сделать

for arr in arr1: 
    for a in arr2: 
     if a[0] == arr[0]: 
      print a 
      print arr 
      # compare the rest of the fields 

Однако, это не может быть лучшим вариантом с точки зрения производительности. Подумайте о сортировке файлов, взглянуть на такие вопросы, как Compare two different files line by line and write the difference in third file - Python и т.д.

0

если я вас понял правильно, вы должны соответствовать одинаковые строки в файлах. этот код может быть полезно для вашей задачи:

>>> s = range(10) 
>>> s 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> s2 = range(20) 
>>> s2 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 
>>> matching = {} 
>>> for i, k in zip(s,s2): 
...  matching[i] = k 
... 
>>> matching 
{0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9} 
>>> 
+0

Спасибо, очень приятно ...... – Rajeev

0

Этот код сравнивает каждую строку первого массива с каждой строкой второго массива. Если строки одинаковы (если списки эквивалентны), то строка помещается в список «rows» и дубликаты экземпляров строк удаляются.

rows = [row1 for row1 in arr1 for row2 in arr2 if row1 == row2] 
    rows = list(set(rows))