0

以下の内容の 2 つのファイルがあります。私の質問は、以下に示すコードで、id が file1 と file2 で一致する場合、file1 の 2 番目の列と file2 の対応する 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
4

4 に答える 4

0

質問は私には完全には明確ではありませんが、あなたはやろうとしていると思います

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

ただし、これはパフォーマンスの観点からは最善のオプションではない場合があります。ファイルの並べ替えについて考え、2つの異なるファイルを1行ずつ比較し、3番目のファイル(Pythonなど)に違いを書き込むなどの質問を見てください。

于 2012-06-01T11:17:09.903 に答える
0

使用するzip

for (a1, a2) in zip(arr1, arr2):
  if a1[0] == a2[0]:
      ##  do something.
于 2012-06-01T11:17:13.080 に答える
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}
>>>
于 2012-06-01T11:25:30.423 に答える
0

このコードは、最初の配列の各行を 2 番目の配列のすべての行と比較します。行が同じである場合 (リストが同等である場合)、その行はリスト "行" に入れられ、行の重複したインスタンスは削除されます。

    rows = [row1 for row1 in arr1 for row2 in arr2 if row1 == row2]
    rows = list(set(rows))
于 2012-06-01T11:53:49.973 に答える