2

3 つのテキスト ファイルがあります。
2 つのファイル (a.txt、b.txt) は同じ方法 (> 100000000 行、3 列のデータ) でフォーマットされ、
1 つは a.txt と b.txt の両方の最初の列からの結合ファイルです。

a.txt ('r')

MARCH2_MARCH2   2.3 0.1
MARCH2_MARC2    -0.22   0
MARCH2_MARCH5   -0.3    0.3
MARCH2_MARCH6   -1.4    0
MARCH2_MARCH7   0.1 0
MARCH2_SEPT2    -1.0    0
MARCH2_SEPT4    0.8 0

b.txt ('r')

MARCH2_MARCH2   2.2 0
MARCH2_MARCH2.1 0.2 0
MARCH2_MARCH3   -0.4    0.1111111
MARCH2_MARCH5   -0.3    0
MARCH2_MARCH6   -0.6    0
MARCH2_MARCH7   1.2 0
MARCH2_SEPT2    0.2 0

c.txt ('r')

MARCH2_MARCH2   
MARCH2_MARCH2.1
MARCH2_MARC2
MARCH2_MARCH5   
MARCH2_MARCH6   
MARCH2_MARCH7
MARCH2_SEPT2    
MARCH2_SEPT4
MARCH2_MARCH3

これらのファイルから、次のように新しいファイルを書きたいと思います。
つまり、各テキスト ファイルの 2 列目と 3 列目の 2 つの値を、1 列目に同じ値を含む対応する行に挿入します (a[0] == c[0] または b[0] == c[0])。
したがって、新しいファイルの列の総数は 5 になる可能性があります。一致する値がない場合は、「NA」を挿入したいと思います。

new.file ('w')

MARCH2_MARCH2   2.3 0.1 2.2 0
MARCH2_MARCH2.1 NA NA 0.2 0
MARCH2_MARC2    -0.2    0 NA NA
MARCH2_MARCH5   -0.3    0.3 -0.3 0
MARCH2_MARCH6   -1.4    0 -0.6  0
MARCH2_MARCH7   1.2 0 1.2   0
MARCH2_SEPT2    -1.0    0 0.2   0
MARCH2_SEPT4 0.8    0 NA NA
MARCH2_MARCH3 NA NA -0.4 0.1111111

私は解決策を探しており、辞書ベースの解析など、別のことを試しました。残念ながら、私はまだ python に不慣れで、作成したすべてのコードが正しく機能しませんでした。手を貸してください。
よろしくお願いします。

4

1 に答える 1

0

ファイルが区切られていると仮定するとTAB、これは機能するはずです:

values = collections.defaultdict(lambda : collections.defaultdict(lambda : "NA NA"))
inputfiles = ['a.txt', 'b.txt']
for fname in inputfiles:
  with open(fname) as infile:
    for line in infile:
      field, vals = line.strip().split('\t', 1)
      values[field][fname] = vals

with open('c.txt') as infile, open('d.txt', 'w') as outfile:
  for line in infile:
    field = line.strip()
    outfile.write("%s\t" %field)
    for fname in inputfiles:
      outfile.write("%s\t" %values[field][fname])
    outfile.write('\n')

出力:

MARCH2_MARCH2   -0.22   0       2.2 0   
MARCH2_MARCH2.1 NA NA   0.2 0   
MARCH2_MARC2    NA NA   NA NA   
MARCH2_MARCH5   -0.3    0.3     -0.3    0       
MARCH2_MARCH6   -1.4    0       -0.6    0       
MARCH2_MARCH7   0.1 0   1.2 0   
MARCH2_SEPT2    -1.0    0       0.2 0   
MARCH2_SEPT4    0.8 0   NA NA   
MARCH2_MARCH3   NA NA   -0.4    0.1111111
于 2013-10-23T22:05:21.993 に答える