Сопоставление столбцов массива в python

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

   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

файл1:

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

файл2:

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

person Rajeev    schedule 01.06.2012    source источник
comment
какой у тебя размер файла данных? строка данных с некоторым порядком?   -  person fanlix    schedule 01.06.2012
comment
Ожидаемый результат не совсем очевиден для меня. Не могли бы вы более четко объяснить, что должна выводить программа (с учетом файлов file1 и file2 в качестве входных данных)?   -  person bruno desthuilliers    schedule 01.06.2012


Ответы (4)


используйте 1_

for (a1, a2) in zip(arr1, arr2):
  if a1[0] == a2[0]:
      ##  do something.
person Priyank Patel    schedule 01.06.2012
comment
Это тоже была моя первая мысль, но, посмотрев на код OP, я пришел к выводу, что OP хочет искать каждый идентификатор во всем файле, а не только в строке с тем же номером. Однако, если я ошибаюсь, использование zip - хорошая идея. - person Lev Levitsky; 01.06.2012

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

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

Однако это может быть не лучший вариант с точки зрения производительности. Подумайте о сортировке файлов, взгляните на такие вопросы, как -in-therte-file">Сравнить два разных файла построчно и записать разницу в третий файл - Python и т.д.

person Lev Levitsky    schedule 01.06.2012

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

>>> 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}
>>>
person Dmitry Zagorulkin    schedule 01.06.2012

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

    rows = [row1 for row1 in arr1 for row2 in arr2 if row1 == row2]
    rows = list(set(rows))
person trans1st0r    schedule 01.06.2012