Конкатенация строк, прочитанных из файла с python? - PullRequest
2 голосов
/ 24 сентября 2010

Режим автозаполнения Emacs разбивает строку, чтобы документ выглядел красиво.Мне нужно присоединиться к строкам, прочитанным из документа.

Например, (CR - возврат каретки, а не реальный символ)

  - Blah, Blah, and (CR)
    Blah, Blah, Blah, (CR)
    Blah, Blah (CR)
  - A, B, C (CR) 
    Blah, Blah, Blah, (CR)
    Blah, Blah (CR)

считывается в строковый буферный массив с функцией readlines () для получения

["Blah, Blah, and Blah, Blah, Blah, Blah, Blah", "A, B, C Blah, Blah, Blah, Blah, Blah"]

Я думал о наличии цикла для проверки '-', чтобы объединить все сохраненные строки перед ним, но я ожидаю, что в Python есть эффективный способ сделать это.

ДОБАВЛЕНО:

Основываясь на коде kindall, я могу получить то, что хочу, следующим образом.

lines = ["- We shift our gears toward nextGen effort"," contribute the work with nextGen."]
out = [(" " if line.startswith(" ") else "\n") + line.strip() for line in lines]
print out
res = ''.join(out).split('\n')[1:]
print res

Результат выглядит следующим образом.

['\n- We shift our gears toward nextGen effort', ' contribute the work with nextGen.']
['- We shift our gears toward nextGen effort contribute the work with nextGen.']

Ответы [ 3 ]

4 голосов
/ 24 сентября 2010

Пока я читаю, ваша проблема состоит в том, чтобы отменить жесткую упаковку и восстановить каждый набор строк с отступами в одну строку с мягкой упаковкой.Это один из способов сделать это:

# hard-coded input, could also readlines() from a file
lines = ["- Blah, Blah, and", 
         "  Blah, Blah, Blah,",
         "  Blah, Blah",
         "- Blah, Blah, and",
         "  Blah, Blah, Blah,",
         "  Blah, Blah"]

out = [(" " if line.startswith(" ") else "\n") + line.strip() for line in lines]
out = ''.join(out)[1:].split('\n')

print out
3 голосов
/ 24 сентября 2010

Я не уверен, если вы хотите просто:

result = thefile.read()  

или, может быть:

result = ''.join(line.strip() for line in thefile)  

или что-то еще ...

0 голосов
/ 24 сентября 2010

Используйте file.readlines(). Возвращает список строк, каждая строка является строкой файла:

readlines(...)
    readlines([size]) -> list of strings, each a line from the file.

    Call readline() repeatedly and return a list of the lines so read.
    The optional size argument, if given, is an approximate bound on the
    total number of bytes in the lines returned.

РЕДАКТИРОВАТЬ: readlines () не лучший способ, как было указано в комментариях. Не обращайте внимания на это предложение и используйте вместо него следующее

Если бы вы использовали вывод, который emacs предоставляет в качестве входных данных для функции python, я бы дал вам следующее (если вывод emacs - одна длинная строка):

[s.replace("\n", "") for s in emacsOutput.split('-')]

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...