0

ファイル 1 からファイル 2 の名前を検索し、一致した行にいくつかのデータをマージしようとしています

ファイル1:

A   28  sep 1980
B   28  jan 1985
C   25  feb 1990    
D   27  march   1995

と file2

A   hyd
B   alig
C   slg 
D   raj

これを使用して:

import sys
data1 = open(sys.argv[1]).read().rstrip('\n')
data2 = open(sys.argv[2]).read().rstrip('\n')
list1 = data1.split('\n')
list2 = data2.split('\n')

for line in list1:
  for item in list2:
    if line.split('\t')[0] in item.split('\t')[0]:
        print(item,'\t',line.split('\t')[3])

結果:

A   hyd      1980
B   alig     1985
C   slg  1990
D   raj      1995

2 つの質問 (概念を明確にするため):

1 - file2 の行の順序を変更すると、一致する数が少なくなることを期待していましたが、それでもすべての一致が得られます。なんで?

2- このプログラムは目的を果たしますが、メモリ効率はどれくらいでしょうか? 提案してください。

ありがとう

4

1 に答える 1

1

1 - file2 の行の順序を変更すると、一致する数が少なくなることを期待していましたが、それでもすべての一致が得られます。なんで?

プログラムはすべての行を完全にクロス結合するため、常に完全な結果が得られます。

2- このプログラムは目的を果たしますが、メモリ効率はどれくらいでしょうか? 提案してください。

最悪。最短のファイルのみをメモリに読み込み、長いファイルの行を 1 回繰り返します。

with open('bigfile.txt', 'r') as bigfile:
  for bigline in bigfile:
    for littleline in littlefiledata:
       ...
于 2013-06-15T21:17:07.557 に答える