2017-09-21 70 views
0

有一些代碼來找到一個字符串中的幾個匹配的術語,在我的情況下,一個日誌文件,我試圖輸出實例到一個csv的工作,但只有時。如果我有太多的變量,它似乎打破並輸出一個空白的CSV,否則它實際上工作。Python re.findall輸出到CSV只有有時

作品:

z = re.findall("(?<=ID\=)\w+", resp) 
rec = re.findall("(?<=RECEIVED\=)\w+", resp) 

with open('/out.csv','w') as file: 
    for x,y in zip(z,rec): 
     file.write(x + ',' +y) 
     file.write('\n') 

給了我一個空白CSV:

i = re.findall("(?<=ID\=)\w+", resp) 
rec = re.findall("(?<=RECEIVED\=)\w+", resp) 
da = re.findall("(?<=DA\=)\w+", resp) 
oa = re.findall("(?<=OA\=)\w+", resp) 
st = re.findall("(?<=DELIVERED\=)\w+", resp) 
pr = re.findall("(?<=PRICE\=)\w+", resp) 
net = re.findall("(?<=NETWORK\=)\w+", resp) 
cn = re.findall("(?<=COUNTRY\=)\w+", resp) 
gw = re.findall("(?<=GATEWAY\=)\w+", resp) 
msg = re.findall("(?<=MSG\=)\w+", resp) 

file = (i + ',' + rec + ',' + da + ',' + oa + ',' + st + ',' + pr + ',' + net + ',' + cn + ',' + gw + ',' + msg) 
with open('out.csv','w') as file: 
    for a,b,c,d,e,f,g,h,j,k in zip(i,rec,da,oa,st,pr,net,cn,gw,msg): 
     file.write(a + ',' + b + ',' + c + ',' + d + ',' + e + ',' + f + ',' + g + ',' + h + ',' + j + ',' + k) 
     file.write('\n') 

也許我是在想這或做錯誤的方式。基本上希望輸出成爲csv格式的這些輸出。如果我正在愚蠢地隨意噓我。

回答

1

使用包含熊貓的函數pd.to_csv(...)並將信息存儲在DataFrame中會不會容易得多?

將DataFrame寫入逗號分隔值(csv)文件。見 Pandas

喜歡的東西:

i = re.findall("(?<=ID\=)\w+", resp) 
rec = re.findall("(?<=RECEIVED\=)\w+", resp) 
da = re.findall("(?<=DA\=)\w+", resp) 
oa = re.findall("(?<=OA\=)\w+", resp) 
st = re.findall("(?<=DELIVERED\=)\w+", resp) 
pr = re.findall("(?<=PRICE\=)\w+", resp) 
net = re.findall("(?<=NETWORK\=)\w+", resp) 
cn = re.findall("(?<=COUNTRY\=)\w+", resp) 
gw = re.findall("(?<=GATEWAY\=)\w+", resp) 
msg = re.findall("(?<=MSG\=)\w+", resp) 

indices = ("i", "rec", "da", "oa", "st", "pr", "net", "cn", "gw", "msg") 

data = pd.DataFrame(data=zip(i, rec, da, oa, st, pr, net, cn, gw, msg), index=indices) 
pd.DataFrame.to_csv(data, "out.csv") 

@JSimonsen: 讓我們來看看這是否會取得成功?

i = ['one', 'two'] 
rec = ['three', 'four'] 
da = ['five', 'six'] 
oa = ['seven', 'eight'] 

indices = ["col1", "col2"] 

df = pd.DataFrame(data=zip(i, rec, da, oa), index=indices) 
df.to_csv('out.csv') 

因爲我不知道你在使用數據,這只是一個簡單的例子,我可以嘗試,但re.findall()返回strings列表。因此,它應該工作...

+0

嗯,這似乎是一個更好的辦法,不是我做的,但最好的一切都是爲了給我玩了是文字打印:我 REC 達 OA ST pr net cn gw msg在csv vs變量本身的數據 – JSimonsen

+0

是的,這是完全有效的。看起來我的數據非常具體,有時會打破它。我只需要精確定義我的正則表達式,以便它不尋找其他與之相匹配的東西。謝謝! – JSimonsen

+0

不客氣! – Albo