2015-06-08 127 views
0

我需要從幾個文件中提取兩個文本塊,並使用python將它們放在單獨的列表中。第一個塊從第30行開始,並且不太難提取。第二個塊在第一個塊之後開始2行;問題是這些塊可以是可變長度的。例如:Python從文件中提取文本塊

prj_files = [ 
    line, 
    line, 
    etc 
] 

prj_files_2 = [ 
    line, 
    etc 
] 

所以我需要採取一切[]之間的線路中的第一塊,把它放在一個列表,並採取[]之間的線路中的第二塊,並把它放在另一個列表。截至目前,我使用:

for i, line in enumerate(prj): 
    if i > 29: 

,開始在特定的行,然後它使用正則表達式來找到「]」它打破了for循環,並將其記錄在CNT結束就行了。然後我使用另一個循環從cnt + 2開始提取第二個塊。雖然我認爲這是有效的,但我覺得它超級低效,因爲我基本上是兩次做同樣的事情。有沒有明顯更好的方法,我失蹤了?

編輯:所以,而不是解析文件,我試圖用import來代替。我認爲它更簡單,但由於我循環瀏覽一些文件以查找所有文件,因此我有一個代表文件名的常規變量。這意味着當我嘗試使用變量導入文件時,我得到的模塊不存在錯誤。因此,例如,我的變量名稱爲py_file,而import正在將其讀取爲py_file而不是實際的路徑值。有沒有辦法解決這個問題?

+0

什麼是原始文件的內容? – farhawa

+0

解析這些行最簡單的方法可能是'exec'文件的內容,這通常是皺眉,所以,如果我可能會問,爲什麼這些文件是這樣佈置的?這可能是[XY問題](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)。 – TigerhawkT3

+0

分享你的正則表達式? –

回答

0

我假設你的文件內容是:

prj_files = [ 
    line, 
    line, 
    etc 
] 

prj_files_2 = [ 
    line, 
    etc 
] 

,那麼你可以這樣做:

exec open(YOUR_FILE).read() 
f1 = open(FIRST_FILE,"w") 
f2 = open(SECOND_FILE,"w") 
for line in pjr_files: 
    f1.write(line) 
for line in pjr_files_2: 
    f2.write(line)