2014-11-24 55 views
1

我是Python編程新手。來自文件的Python Regex Table Creator

我的任務是:

我有大量的數據的一個巨大的txt文件(20 + GB)。該結構是這樣的:

Crap 
Crap 
Crap 
... 
Crap 
Crap 
Useful Data = x y z 
Useful Data 2 = x2 y2 z2 
Crap 
Crap 
... 
Crap 
Crap 
Useful Data = x' y' z' 
Useful Data 2 = x2' y2' z2' 
Crap 
Crap... 

等等這樣5000級的對象

我必須採取一切x,y和z和把它們放在一個文件,該文件應該看起來像下面這樣:

x y z x2 y2 z2 
x' y' z' x2' y2' z2' 
x'' y'' z'' x2'' y2'' z2'' 

......等等(我應該有5000行)。

我認爲正則表達式對於這項任務會很有幫助。 我已經寫了這一點,但我是一個真正的小白和不能去:

f_in_name="starout.txt" #input file 
f_out_name="cmposvel" #output file 
f_in = open(f_in_name) 
for l in f_in: 
    if "system_time" in l: 
     time=re.compile('^ system_time =\s+(\S+)') 
    elif "com_pos" in l: 
     poscm=re.compile('^ com_pos =\s+(\S+)\s+(\S+)\s+(\S+)') 
    elif "com_vel" in l:  
     velcm=re.compile('^ com_vel =\s+(\S+)\s+(\S+)\s+(\S+)') 
     #how do I write t,x,y,z,vx,vy,vz in the output? 

我怎麼寫(\ S +)的輸出?此外,re.compile僅在當前行或整個文檔中進行搜索?我很困惑, 有人能幫助我嗎?我真的需要這樣做一個情節,並沒有線索怎麼做。

回答

1

re.compile只准備使用正則表達式 - 你可以在循環之外進行操作。這不是它的應用。 「re.search」或「re.match」是使用編譯表達式的方法。 然後,您將返回匹配項(如果不匹配則返回None),並且這些包含您的數據組。

你可以提取組以獲得有用的東西。 例如:

my_re = re.compile("stuff=\s+(\S+)\s+(\S+)") 
line = "stuff= foo bar" 
matches = my_re.search(line) 
if matches: 
    print(matches.groups()) 
+0

感謝很多人,我該怎麼處理的事實,有5000個表達式在我的文件比賽有哪些?例如,有5000行格式爲'^ system_time = \ s +(\ S +)',那麼如何在輸出中以正確的順序編寫它們? – user4288514 2014-11-24 18:47:12

+0

循環遍歷它們,並在循環中執行re.search(與您在示例代碼中一樣)。 – 2014-11-25 16:53:19