2016-04-14 52 views
1

Yaptığım şey temel olarak python komut dosyası kullanan bir apache error_log dosyasından bir rapor hazırlamaktır. Ben uğraşıyorum ne bir örnek: sondaki metin izler hata türüdürBir dosyadaki satırlardaki birden çok alt dizeyi okuma

core:notice - SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0 
suexec:notice - AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 

: Ben böyle bir şey olmazdı almaya çalışıyorum

[Wed Apr 13 18:33:42.521106 2016] [core:notice] [pid 11690] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0 
[Wed Apr 13 18:33:42.543989 2016] [suexec:notice] [pid 11690] AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 

Sonuçta. Sonra bu biçimlendirilmiş metni yeni bir dosyaya yazmam gerek.

Bunu yapmak için Normal İfadeler'i kullanmaya çalışıyorum ama python'u kullandığımdan beri yıllar geçti ve daha önce hiç düzenli ifadeler kullanmadım. Şimdiye kadar ulaşabildiğim en çok şey ilk (tarih) bölümünü ayırmaktır, ancak sonraki parantezin etrafındaki alt dizeleri ve sondaki metni nasıl alacağımı anlayamıyorum. Her türlü yardım çok takdir edilecektir! Veri tam dört alanlar ve oluştuğu için

+0

Hata günlüğüne birkaç ham örnek satırı gönderir misiniz? – TheLazyScripter

+0

Yaptım, ilk blok budur. [Wed Apr] vb. Satırlar günlük kütüğünden direktir. – zimty

cevap

2

sonuncusu hariç alan başına güzel kare parantez ile gösterilir, böyle Regex kullanmadan görev yapmak için bu davranışlardan avantajlar sürebilir:

texts = ['[Wed Apr 13 18:33:42.521106 2016] [core:notice] [pid 11690] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0', \ 
'[Wed Apr 13 18:33:42.543989 2016] [suexec:notice] [pid 11690] AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)'] 
for text in texts: 
    words = text.replace('[','').split(']') 
    newWords = words[1] + ' -' + words[3] 
    print(newWords) 
sonuçlanan

: ilk başlangıç ​​boş dize ile braket kare bir yerini ve kapanış kullanmak

core:notice - SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0 
suexec:notice - AH: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec) 

fikir bölmek parametre olarak braket karesi sizin Kelime (böylece de kaldırılacak): bitirdiniz

newWords = words[1] + ' -' + words[3] 

Ve:

words = text.replace('[','').split(']') 

Sonra basitçe yeni adres string den meydana istediğiniz alanları birleştirmek gerekir.

+0

Ah tamam, yapmaya çalıştığımdan çok daha kolay! Ben de açıklamalara minnettarım. – zimty

+1

@zimty yep, ilk önce 'string'in karakteristiklerini kullanmaya çalışın! :) Regex basit durumlar için çok fazla ve * hatta * performansınızı yavaşlatabilir – Ian