2012-05-23 22 views
1

我有一個文本文件前工作的列表:打破在文本文件中多行入名單

blahblahblahblahblahblahblah 
blahblahblahblahblahblahblah 
start 
important1a important1b 
important2a important2b 
end 
blahblahblahblahblahblahblah 

我想要的是得到一個輸出像

["'important1a', 'important1b'", "'important2a', 'important2b'"] 

其中每個重要行被分成單獨的元素,但是它們按行分組在一個列表中。

我已經得到接近這一點:

import shlex 

useful = [] 
with open('test.txt', 'r') as myfile: 
    for line in myfile: 
     if "start" in line: 
      break 
    for line in myfile: 
     if "end" in line: 
      break  
     useful.append(line) 

data = "".join(useful) 

split_data = shlex.split(data) 
print split_data 

此輸出:

['important1a', 'important1b', 'important2a', 'important2b'] 

有行之間沒有區別。

我該如何修改這個來區分每一行?謝謝!

回答

2

列表解析救援:

[", ".join(map(repr, ln.split())) for ln in open("test.txt") 
            if "important" in ln] 

回報

["'important1a', 'important1b'", "'important2a', 'important2b'"] 
+0

請問您是否可以詳細說明一下,我不確定「...」代表什麼。謝謝! –

+0

@BradConyers:'...'是交互式Python解釋器的延續提示。你不要自己寫。 –

+0

Gotcha,所以當我把這個實現到我的實際文本文件中時,我得到了很多「A」,其中A在文本文件中已經有了引號。什麼可能導致這個?此外,如果有目錄路徑,它會在C:\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ –

0

怎麼是這樣的:

useful = [] 
for line in open('test.txt'): 
    parts = line.split() 
    if parts[1:]: 
     useful.append("'%s'" % "', '".join(parts)) 

print useful 
+0

謝謝!這似乎承認兩條線,但我不知道如何使它通過引號區分每行。 –

+0

@BradConyers:我不確定這是有意的還是意外的,我會修改代碼來做到這一點:) – Wolph

+0

@BradConyers:雖然看着代碼...我認爲這個想法是錯誤的。你能告訴我你的目標是什麼嗎?生成這個輸出對我來說似乎是一個壞主意:) – Wolph

0

你可以使用列表內涵。您的代碼如下所示:

useful = [] 
with open('test.txt', 'r') as myfile: 
    for line in myfile: 
     if "start" in line: 
      break 
    for line in myfile: 
     line = line.strip() 
     if "end" in line: 
      break  
     useful.append(line) 

print(["'%s'" % ','.join(elem.split(' ')) for elem in useful])