-2

2つのテキストファイルがあります。

sample-r1.txt

Bud Abbott 51 92.3
Mary Boyd 52 91.4
Hillary Clinton 50 82.1

sample-r2.txt

Don Adams 51 90.4
Jill Carney 53 76.3
Randy Newman 50 41.2

各行の2番目のインデックスである姓でそれらをマージして注文したい(プログラムは既存のマージまたはソートソフトウェアを使用できない場合があります)

これらは私のコードです

one = open("sample-r1.txt",'r')
two = open("sample-r2.txt",'r')

for line in one:
    k = line.rstrip().split('\t')

for record in two:
    h= record.rstrip().split('\t')

i=0
j=0
newList=[]

while i < len(k) and j<len(h) :
    if k[i][1] <= h[j][1]:
        newList.append(k[i])
        i+=1            
    else:
        newList.append(h[j])
        j+=1

print(newList)
4

2 に答える 2

0

これを試してください:いくつかの修正:k、h =の代わりにk、h.appendそれ以外の場合、kとhはリストであり、k[][]は文字列ではなくcharです

one = open("sample-r1.txt",'r')
two = open("sample-r2.txt",'r')
k=[]
h=[]
for line in one:
    tmp=line.rstrip().split('\t')
    if len(tmp)>1:
        k.append ( tmp )
for record in two:
    tmp=record.rstrip().split('\t')
    if len(tmp)>1:
        h.append ( tmp )
i=0
j=0
newList=[]
while i < len(k) and j < len(h):
    if k[i][1] <= h[j][1]:
        newList.append(k[i])
        i+=1
    else:
        newList.append(h[j])
        j+=1
while i < len(k):
    newList.append(k[i])
    i+=1
while j < len(h):
    newList.append(h[j])
    j+=1
for row in newList:
    print("\t".join(row))
于 2012-11-16T20:29:06.153 に答える
0

まず、入力がタブ区切りであるかどうかは明確ではありません。split()の代わりにを使用split('\t')して、すべての列を取得するようにします。

次に、whileいずれかの入力が使い果たされるとループが終了しますが、もう一方の入力にはまだデータが残っています。これは、出力が短すぎることから明らかなはずです。

于 2012-11-16T21:54:50.787 に答える