2017-10-06 45 views
0

當我嘗試將.txt文件解析爲csv/xlsx格式時,我對python很陌生我正面臨着下面的問題。在python中解析csv/xlsx中的.txt文件

代碼來解析(HTML爲TXT):

import requests as req 
import re 

resp = req.get("my_server_url") 

content = resp.text 

stripped = re.sub('<[^<]+?>', '', content) 
with open("Output.txt", "w") as text_file: 
    print("Purchase Amount: {}".format(stripped), file=text_file) 
print(stripped) 

解析文本文件後,我得到的.txt格式的輸出如下:

Servicegroup 'app_service' Host State Breakdowns: 


Host% Time Up% Time Down% Time Unreachable% Time Undetermined 
sever1.domain.com:1717100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
sever2.domain.com:1717100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
sever3.domain.com:1717100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
Average100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% 


Servicegroup 'app_service' Service State Breakdowns: 


HostService% Time OK% Time Warning% Time Unknown% Time Critical% Time Undetermined 
sever1.domain.com:1717app_availability_check0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)100.000% (100.000%)0.000% 
app_data_size_check0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)100.000% (100.000%)0.000% 
app_hitrate_check0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)100.000% (100.000%)0.000% 
app_log_size_check0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)100.000% (100.000%)0.000% 
app_sessions_check0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)100.000% (100.000%)0.000% 
sever2.domain.com:1717app_availability_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_data_size_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_hitrate_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_log_size_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_sessions_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
sever3.domain.com:1717app_availability_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_data_size_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_hitrate_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_log_size_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
app_sessions_check100.000% (100.000%)0.000% (0.000%)0.000% (0.000%)0.000% (0.000%)0.000% 
Average87.500% (87.500%)0.000% (0.000%)0.000% (0.000%)12.500% (12.500%)0.000% 

從這個輸出上面我需要解析excel中的相同值分別與下列值在各列

column 1    column 2  column 3          column 4 
Host%     Time Up%  HostService%         Time OK% 
sever1.domain.com:1717 100.000%  sever1.domain.com:1717app_availability_check 0.000% 
sever2.domain.com:1717 100.000%  sever2.domain.com:1717app_availability_check 100.000% 
sever3.domain.com:1717 100.000%  sever3.domain.com:1717app_availability_check 100.000% 

有沒有什麼方法可以將這些特定的數據轉換爲csv/excel? 任何幫助表示讚賞

+1

使用csv模塊:https://docs.python.org/2/library/csv.html –

+0

我可以用csv模塊實現這個功能嗎? 我已經瀏覽了文檔我找不到任何方法來做到這一點 – Alex

回答

0

你需要做更好的數據消毒或與您的正則表達式更具包容性。

一般而言,當您仍然需要處理時,您不希望將「某物」歸爲「無」。當您剝離HTML標籤時,您留下的數據彼此接觸。相反,您希望使用分隔符,以便稍後在腳本中進一步細分。現在

考慮,

import string 

DELIM = '||' 

stripped = re.sub('<[^<]+?>', DELIM, content) 
lines = [] 

for line in stripped.split(): 
    line = line.strip('|') 

    # make sure it's an actual data line 
    if line[0] in string.ascii_uppercase and line[-1] == '%': 
     continue 

    columns = [c.strip('%() ') for c in line.split(DELIM)] 

    lines.append(columns) 

.. 
.. 
# write lines to csv via `csv` module 

,我們可以判斷,如果每一行是實際的數據,因爲主機名啓動小寫最後一列是一個百分比。然後,我們可以再次拆分每一行,從每列中刪除不必要的字符。

最後,我們剩下一個元組列表,其中列表中的每個元素都是一行,並且行中的每個元素都是一個單元格。

重要的是要記住str.strip將以任何順序刪除任何這些字符,只要它們是最外面的值之一。

x = 'abcdefg00001111!!' 
print(x.strip('cab0!1')) 
.. 
.. output: 
defg 
+0

那麼我應該使用上面提到的上述概念來重新分析數據嗎?而從HTML解析它到txt文件? – Alex

+0

我試過上面的代碼,它沒有給出預期的輸出,因爲我只需要上面提到的4列數據。 – Alex