2014-12-04 2 views
1

У меня есть файл с линиями, как это:список Reorder в конкретных строках

r1 1 10 
r2 10 1 #second bigger than third (10>1) 
r3 5 2 # ""  ""   (5>2) 
r4 10 20 

И я хотел бы изменить порядок строк со вторым словом больше, чем третий, меняя possition [3] в [2 ].

Желаемый результат:

r1 1 10 
r2 1 10 
r3 2 5 
r4 10 20 

Я сделал код, который упорядочивает строки, но он выводит только переупорядоченные линии, но не все строки:

with open('test','r') as file, open('reorderedtest','w')as out: 

for line in file: 
    splitLine = line.split("\t") 
    reorderedlist = [splitLine[0], splitLine[2], splitLine[1] ] 
    if int(splitLine[1]) > int(splitLine[2]): 
     str = " " 
     print str.join(reorderedlist) 

И это только печатает:

r2 1 10 
r3 2 5 

Любые идеи для получения желаемого результата?

ответ

2

Самый простой модификации существующего кода заключается в следующем:

with open('test','r') as file, open('reorderedtest','w')as out: 

for line in file: 
    splitLine = line.split("\t") 
    reorderedlist = [splitLine[0], splitLine[2], splitLine[1] ] 
    if int(splitLine[6]) > int(splitLine[7]): 
     str = " " 
     print str.join(reorderedlist) 
    else: 
     print line 
1

Это будет работать для любого числа столбцов, где у вас есть r# в первом столбце, то любое количество числовых столбцов следующее.

with open('test.txt') as fIn, open('out.txt', 'w') as fOut: 
    for line in fIn: 
     data = line.split() 
     first = data[0] # r value 
     values = sorted(map(int, data[1:])) # sorts based on numeric value 
     fOut.write('{} {}\n'.format(first, ' '.join(str(i) for i in values)) # write values back out 

Результирующий файл out.txt

r1 1 10 
r2 1 10 
r3 2 5 
r4 10 20 
Смежные вопросы