2015-04-29 1 views
0

Мне нужно открыть небольшое, но переменное количество файлов, каждое из которых имеет одинаковое количество строк. Затем мне нужно вернуть кортеж строк в каждом. Мой код возвращает кортеж, но каждый элемент сохраняет его '\ n'; как удалить это, прежде чем он будет упакован в кортеж?strip ' n' из строк нескольких одновременно открытых файлов

это код до сих пор

files = ['file1', 'file2', 'file3'] 
fds = [ open(file) for file in files ] # gets all file open at same time 
read_fds = izip(*fds) 
for tpl in read_fds: 
    print tpl # will become a 'yield' stmt once the '\n' is sorted 
for fd in fds: 
    fd.close() 

У меня есть тестовый набор из 3 файлов, каждый из которых имеет 5 строк, каждая из которых указывает номер файла номер строки. Код печатает эту точную запись этих тестовых файлов.

('f1ln1\n', 'f2ln1\n', 'f3ln1\tthis\tthat\n') 
('f1ln2\n', 'f2ln2\n', 'f3ln2\tthis\tthat\n') 
('f1ln3\n', 'f2ln3\n', 'f3ln3\tthis\tthat\n') 
('f1ln4\n', 'f2ln4\n', 'f3ln4\tthis\tthat\n') 
('f1ln5\n', 'f2ln5\n', 'f3ln5\tthis\tthat\n') 

До сих пор так хорошо, но как раздеться(), что «\ п» из каждой строки, прежде чем она будет упакована в кортеж?

Я знаю, что есть ответ! Глядя на предложения. Спасибо & у вас отличный день.

+0

длинный путь, чтобы лишить каждую линию, один за другим (во время чтения построчно) – Morb

ответ

0

Как насчет:

for tpl in read_fds: 
    templist = [] 
    for item in tpl: 
     templist.append(item.rstrip("\n")) 
    print tuple(templist) 

Это позволит удалить символ новой строки на правой стороне строки

+0

редакцией, потому что я рассматривал кортеж в виде строки ... Исправлено – Stefan

+0

@Stephan, благодаря – bobox

1

Вы также можете использовать нарезку строки

for tpl in read_fds: 
    list_stripped = [] 
    for s in tpl: 
     list_stripped.append(s[:-1]) 
    print tuple(list_stripped) 
+0

Вы сделали ту же ошибку, как я сделал, это кортеж, над которым вы работаете, а не строка. Также, если в конце файла нет новой строки, ваша душа будет обрезать данные. – Stefan

+0

Отредактировано для работы с строкой вместо кортежа. Спасибо, Стефан! –

0

Я думаю, что самый простой путь должен был бы изменить назначение на read_fds так, чтобы он генерировал измененные кортежи от izip:

read_fds = (tuple(s.rstrip() for s in tup) for tup in izip(*fds)) 

Однако, я не проверял это.

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