2016-02-23 4 views
1

У меня есть файлКак определить длину ` t` и отформатировать его?

52779 0 0 0 1 0 0 0 0 1 52779.jpg 
278973 0 0 0 1 0 0 0 0 1 278973.jpg 
195284 0 0 0 1 0 0 0 0 1 195284.jpg 
19992 0 0 0 1 0 0 0 0 1 19992.jpg 

Файл создается с помощью IO в питона (см. Ниже) Я ожидаю, что длина каждого места равна 1 \t. Тем не менее, тест показывает, что некоторые строки в порядке, в то время как другие - нет.

Как определить длину \t и отформатировать каждое пространство до \t?


Исходный файл

204149 "0 0 0 1 0 0 0 0 1" 204149.jpg 
52779 "0 0 0 1 0 0 0 0 1" 52779.jpg 
278973 "0 0 0 1 0 0 0 0 1" 278973.jpg 
195284 "0 0 0 1 0 0 0 0 1" 195284.jpg 

То, что я сделал в исходный файл

fi = open('image.lst') 
fi.readline() 
fo = open('image2.lst', "w") 
for line in fi: 
    line = line.replace('"', ' ') 
    fo.write("%s" % line) 
fi.close() 
fo.close() 
+0

Так что вы хотите использовать закладки, или только вкладки выровненные пространства? – Will

+0

@will Выход должен быть «2020 \ t 12392 \ t 12309'. –

+0

@JohnHass Точнее: '2020 \ t12392 \ t12309'. Не должно быть пробелов? – idjaw

ответ

1

Я не уверен, что вы подразумеваете под "определения длины '\t'". len('\t') == 1, если это то, что вы имеете в виду ... Но в этой линии

line = line.replace('"', ' ') 

вы заменяете двойные кавычки с одним пробелом, так что вы в конечном итоге с пробелами, а не '\t'.

Попробуйте это:

with open('image.lst') as fi, open('image2.lst', 'w') as fo: 
    for line in fi: 
     line = line.replace(' ', '\t').replace('"', '') 
     fo.write(line) 

Выходная линия будет

204149\t0\t0\t0\t1\t0\t0\t0\t0\t1\t204149.jpg 
+0

Для '1231 \ t2132' длина равна 1. Для' 1231 \ t \ t2132' длина равна 2. –

+0

@JohnHass Ну, похоже, вы хотите подсчитать * номер * '' \ t'' s в строке. Вы можете использовать 'str.count' для этого. Но я не думаю, что вам понадобится это для выполнения того, что вы описали в OP. – gil

Смежные вопросы