Python заменяет \ r \ n в элементах массива - PullRequest
1 голос
/ 09 декабря 2011

У меня есть список. один элемент - это большая строка, содержащая \r\n. Я хочу удалить его, чтобы при записи элементов в новый файл начиналась новая строка, когда в него записывался новый список.

Как-то replace("\r\n",""), не работает.

Например:

['1','Smth\r\nmoretext']

Это должно быть в новом файле:

1, smthmoretext

Спасибо

Ответы [ 4 ]

4 голосов
/ 09 декабря 2011

Вы можете использовать список значений , чтобы выполнить операцию с каждым элементом в списке и поместить результаты в новый список.

items = ['abc', 'abc\r\ndef', 'foo\r\n bar\r\n']
newItems = [s.replace('\r\n', '') for s in items]
print newItems
# ['abc', 'abcdef', 'foo bar']
1 голос
/ 09 декабря 2011

Следующий фрагмент даст желаемый результат:

xs = ['1', 'Smth\r\nmoretext']
result = ','.join(map(lambda x: x.replace('\r\n',''), xs)).lower()

Встроенная функция map используется для применения анонимной функции lambda к каждому элементу xs.массив, где удаляется подстрока \r\n.

Команда ','.join(...) затем берет каждый элемент полученного массива и склеивает их вместе с запятыми между элементами.

Наконец, мывызовите '.lower ()' для конечной результирующей строки, чтобы получить всю строчную строку '1, smthmoretext', которую вы хотели.

Альтернативой может быть:

result = ','.join([ x.replace('\r\n','') for x in xs ]).lower()

Или в нескольких строках:

result = [ x.replace('\r\n','') for x in xs ]
result = ','.join(result)
result = result.lower()

Выберите, что для вас наиболее целесообразно, а также, что более важно, что может быть проще для чтения тем, кто будет поддерживать ваш код (который может быть вами самим).6 месяцев).

1 голос
/ 09 декабря 2011

Проблема в том, что вы обрабатываете строки и массивы взаимозаменяемо. Не делай этого.

Это заменит вам

>>> old = ['1','Smth\r\nmoretext']
>>> new = [i.replace("\r\n","") for i in old]
>>> print new
['1', 'Smthmoretext']

не знаю, как вы хотите написать

>>> open('file-a.txt',w).write('\n'.join(new))
>>> open('file-b.txt',w).write(','.join(new))

хотя вы также можете сделать:

>>> new = ','.join(old)
>>> new.replace("\r\n", "")
>>> print new
>>> 1,Smthmoretext
1 голос
/ 09 декабря 2011

Что не так с заменой? Как вы вызываете функцию замены?

Кажется, я работаю:

>>> 'Smth\r\nmoretext'.replace("\r\n", "")
'Smthmoretext'

Чтобы заменить все элементы в списке:

lst = ['1','Smth\r\nmoretext']
lst = [txt.replace("\r\n", "") for txt in lst]
...