Явное соединение строк в Python - PullRequest
4 голосов
/ 16 мая 2011

Я читаю файл построчно и выполняю некоторую обработку текста, чтобы получить вывод в определенном формате Мой код обработки строки выглядит следующим образом:

file1=open('/myfolder/testfile.txt')
scanlines=file1.readlines()
string = ''

 for line in scanlines:
    if line.startswith('>from'):
         continue
    if line.startswith('*'):
        continue
    string.join(line.rstrip('\n')) 

Вывод этого кода выглядит следующим образом:

а

1008 * Защита *

ГХИ

Есть ли способ объединить эти физические строки в одну логическую строку, например:

ABCDEFGHI

Как я могу объединить несколько строк в одну большую строку?

Если я читал из файла с очень длинными строками, существует ли риск переполнения при объединении нескольких физических строк в одну логическую строку?

Ответы [ 4 ]

5 голосов
/ 16 мая 2011

Есть несколько способов сделать это.например, просто с помощью + следует добиться цели.

"abc" + "def" # создает "abcdef"

Если вы попытаетесь объединить несколько строк, вы можете сделать это с помощью объединенияМетод:

', '.join(('abc', 'def', 'ghi')) # produces 'abc, def, ghi'

Если вы не хотите использовать разделитель, используйте метод пустой строки ''.join().

3 голосов
/ 16 мая 2011

Немного убрав вещи, проще всего добавить их в массив и затем вернуть результат

def joinfile(filename) :
   sarray = []
   with open(filename) as fd :
       for line in fd :
           if line.startswith('>from') or line.startswith('*'):
               continue
          sarray.append(line.rstrip('\n'))
   return ''.join(sarray)

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

fd = open(filename)
str = ''.join([line.rstrip('\n') for line in fd if not (line.startswith('>from') or line.startswith('*'))])

Да, конечно, вы можете прочитать файл, достаточно большой для переполнения памяти.

2 голосов
/ 16 мая 2011

Использовать добавление строки

>>> s = 'a'
>>> s += 'b'
>>> s
'ab'
0 голосов
/ 16 мая 2011

Я бы предпочел:

oneLine = reduce(lambda x,y: x+y, \
                 [line[:-1] for line in open('/myfolder/testfile.txt') 
                            if not line.startswith('>from') and \
                               not line.startswith('*')])
  • line[:-1], чтобы удалить все \n
  • . Второй аргумент reduce - это понимание списка, которое извлекаетвсе строки, которые вас интересуют, и удаляет \n из строк.
  • сокращение (просто если вам это действительно нужно) для создания одной строки из списка строк.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...