2016-01-22 48 views
-1

我嘗試在python中編寫腳本,以便在一個降價文檔中的節內劃分內容。例如,在用於從降價文檔中獲取節內容的Python腳本

# Section 1 

Hello 

# Section 2 

Bla la dsds 

# Section 3 # 

Ssss 

## Subsection ## 

aaaa 

我想:

contents = ['# Section 1\n\nHello\n', '# Section 2\n\nBla la dsds\n', '# Section 3 #\n\nSsss\n\n## Subsection ##\n\naaaa'] 

我怎麼能這樣做?

+0

提示:'itertools.groupby(your_text.splitlines(),lambda行:line.startswith('#'))'或'itertools.groupby(your_text.splitlines(),運算符。 methodcaller('startswith','#'))' – GingerPlusPlus

回答

0

我對Markdown不是很瞭解,但我會給它一個機會。

減價文件僅僅是一個txt文件,這樣你就可以加載它像這樣:

file = open('markdownfile.md','r') 
data = file.read() 
file.close() 

看起來好像是要拆分爲"\n#"共同的因素,但也沒有跟隨,但另一"#"或者只是不"\n##"

所以一個方法可以讓我看到這樣做是爲了通過"\n#"將文件分割然後修復小節:

splitData = data.split("\n#") 
for i in xrange(len(splitData)-1,-1,-1):#going backwards 
    if splitData[i][0] == '#':#subsection 
     splitData[i-1] += '\n#'+splitData.pop(i)#being sure to add back what we remove from the .split 
    else:#section 
     splitData[i] = '#'+splitData[i]#adding back the wanted part removed with the .split 

或者你可以遍歷字符和做手工拆分

contents = [] 
for i in xrange(len(data)-1-3,-1,-1): 
    if data[i:i+2] == '\n#' and data[i:i+3] != '\n##' 
     contents.append(data[i+1:])#append the section 
     data = data[:i]#remove from data 
contents.reverse() 

我希望這有助於。

編輯:你不能只拆分data通過"\n# "(與末尾的空間),因爲(通過我的研究)的空間並不一定在那裏,它被公認爲一節頭。 (例如#Section 1仍然有效)