2017-01-25 39 views
-1

我有一個文件,其中標題可以是這個樣子:使用Python來連接段落標題下方

===標題1 ===

文本

文本

文本

===標題2 ===

text

文本

'' 標題3 ''

文本

文本

'' '標題4' ''

文本

文本

文本

我試圖來連接其航向,鑑於上面的例子中沿着每個段落,最後的結果應該是這樣的:

===標題1 ===文字文字文字

===標題2 ===文本文本

'' 標題3 '' 的文本的文本

'' '標題4' '' 的文本的文本的文本

使用python去做這件事的最好方法是什麼?

+0

嘗試先進行分類。什麼是標題?這與身體文字有什麼不同?在你的例子中,它看起來像一個標題以標點符號開頭,所以考慮'line.startswith(string.punctuation)' –

+0

然後考慮逐行閱讀文件,隨時分組。這個初始解析的結果應該是列表的列表,其中每個內部列表是您打算連接在一起的文檔中的行列表。 –

回答

1

嘗試先進行分類。什麼是標題?這與身體文字有什麼不同?從你的例子,它看起來像一個頭與一個標點符號開始,所以考慮

import string 

def is_header(line): 
    return line.startswith(string.punctuation) 

然後考慮逐行讀取,分割文件中的行分成組,當您去。這個初始解析的結果應該是列表的列表,其中每個內部列表是您打算連接在一起的文檔中的行列表。現在

parsed_lines = [] 
cur_p = [] 
with open(filename) as f: 
    for line in f: 
     if is_header(line) and cur_p: 
      parsed_lines.append(cur_p) 
      cur_p = [] 
     else: 
      cur_p.append(line.strip()) 

你應該有這樣一個列表的列表:

[ ["===Some Header===", "body text", "more body text", "even more"], 
    ["''Another header''", "wow such body", "many text"], 
    ... ] 

你也可以使用str.join綁在一起。

result = [] 

for p in parsed_lines: 
    result.append(' '.join(p)) 

這給你

# result is 
["===Some Header=== body text more body text even more", 
"''Another header'' wow such body many text", ... ] 

我相信你能弄清楚如何使用str.join綁起來result你喜歡的方式。