2017-02-17 9 views
1

Я читаю из файла и сохраняю каждый символ в двухмерном массиве. Я пытаюсь избавиться от «\ n», который приходит в конце каждой строки. Мой код до сих пор:В списке нет полосы атрибутов

l = [] 
for i in range(5): 
    l.append([]) 
f = open('file.txt','r') 
count = 0 
for line in f: 
    for char in line: 
     l[count].append(char) 
    count += 1 

f.close() 

l[0].rstrip('\n') 

Я попытался вместо l[0].rstrip('\n'):

l = map(lambda s: s.strip('\n'), l) и l = [i.rstrip() for i in l ]

Каждый из них возвращает ошибку, что список не имеет атрибута полосы (или rstrip). В любом случае, чтобы исправить это?

+1

Почему бы вам просто не добавить 'char' в' l [count] ', если это' \ n'? В списках нет 'strip()', строки. Вы пытаетесь создать строку в каждом 'l [count]' или действительно список одиночных символов? – Scovetta

+0

'strip' для строк, поэтому примените его к строке до того, как вы выполните другую работу:' для char в line.strip(): ' – tdelaney

+0

Я добавляю оператор if перед' l [count] .append (char) ', чтобы проверить, является ли char '\ n', и избавился от' l [0] .rstrip ('\ n') ', и теперь он работает. –

ответ

1

l является список перечней. Поэтому, если вы звоните l[0].rstrip(), вы можете rstrip() в подсписке. Но даже если бы strip() работал бы, вы бы не увидели никакой разницы, так как строки неизменяемы и, таким образом, он вернет строку , а не обновит более старую.

Однако вы можете легко использовать:

l[0] = [x.rstrip('\n') for x in l[0]] 

обновить только l[0].

Если вы хотите обновить все подсписки, вы можете использовать следующий список понимание:

l = [[x.rstrip('\n') for x in s] for s in l] 

Кроме того, код для чтения файла в память довольно странно: он будет работать, только если файл имеет меньше чем шесть строк. Вы можете использовать следующий подход:

with open('file.txt','r') as f: 
    l = [list(line.rstrip('\n')) for line in f] 

это заменяет весь фрагмент кода в вопросе.