-2

我有两个文本文件:

样本-r1.txt

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

样本-r2.txt

Don Adams 51 90.4
Jill Carney 53 76.3
Randy Newman 50 41.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

首先,不清楚您的输入是制表符分隔的。使用split()而不是split('\t')确保您获得所有列。

其次while,当任一输入用尽时,您的循环将终止,但另一个输入仍将保留一些数据。输出太短应该很明显。

于 2012-11-16T21:54:50.787 回答
0

试试这个:一些修复:k,h.append 而不是 k,h= 否则 k 和 h 是列表并且 k[][] 是一个字符而不是一个字符串

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 回答