2014-04-23 91 views
0

我正嘗試使用Python讀取此文件,但是我總是收到ValueError: Need more than 0 values to unpack。想知道是否有人可以幫忙?從python中的日誌文件中讀取特定列

我需要在這個文件中讀取並選擇特定的列,這樣我才能將這些值放到一個高圖上。

在文件中,第一行是空的,這是我認爲可能會導致此錯誤,但我不知道如何解決此問題。這是文件的樣子:

Wed Apr 23 00:00:13 GMT 2014
ID USER PR NUM VIR RE MEH S CPU MM TIMESTA INFO
1555 root 19 0 3162m 1.7g 8192 S 34.6 22.1 955:04.48 resource
1566 nobody 19 0 2172m 2.9g 8192 S 22.6 33.1 955:04.48 resource2

這是我使用在一分鐘代碼:

import csv 

r = csv.reader(open("C:/test.log")) 

ID = [] 
user = [] 
PR =[] 
NUM = [] 
VIR = [] 
RE = [] 
MEH = [] 
S = [] 
CPU = [] 
MM = [] 
TIMESTA = [] 
INFO = [] 

for ID, user, PR, NUM, VIR, RE, MEH, S, CPU, MM, TIMESTA, INFO in r: 
    ID.append(ID) 
    user.append(user) 
    PR.append(PR) 
    NUM.append(NUM) 
    VIR.append(VIR) 
    RE.append(RE) 
    MEH.append(MEH) 
    S.append(S) 
    CPU.append(CPU) 
    MM.append(MM) 
    TIMESTA.append(TIMESTA) 
    INFO.append(INFO) 

print ID, CPU, MM, INFO 

感謝

+0

的線是不一樣的,所以你不能把它們當作是相同的。用readlines()讀取整個文件,然後看看前兩個,如果你需要它們,或者跳過它們並解析其餘的。通過這種方式,您可以對條目進行計數,並檢查每行是否包含所有字段。 – user1603472

回答

0

首先,你不能命名的臨時值您的for-loop與您要存儲信息的列表相同。此外,該日誌文件不是一個CSV文件。 CSV表示逗號分隔值,例如

a, b, c 

你想要的是這樣的。

log = open('C:/test.log', 'r').read().splitlines() # read the file, split by line, and remove extraneous whitespace. 
log = log[2:] # get rid of 1st and second lines. 
log = [line.split(' ') for line in log] # split each line by spaces 
ID = [] 
users = [] 
# etc. 
for line in log: 
    ID.append(line[0]) 
    users.append(line[1]) 
    # etc. 

我沒有測試這個,但它應該工作:)祝你好運。

+0

謝謝!我嘗試了代碼,但我似乎得到了一個屬性錯誤:'list'對象沒有屬性'strip'。 – user3216736

+0

對不起。擺脫第一行中的strip()函數。 – grey

+0

另外,如果這是作業,你可能想擺脫列表理解(Google是你的朋友)。大多數Python初學者不會使用它們;) – grey

0

我想你想這樣做。

import csv 
from itertools import islice 

rs = csv.reader(open("C:/test.log", 'rb'), delimiter=' ') 

IDs  = [] 
users = [] 
PRs  = [] 
NUMs  = [] 
VIRs  = [] 
REs  = [] 
MEHs  = [] 
Ss  = [] 
CPUs  = [] 
MMs  = [] 
TIMESTAs = [] 
INFOs = [] 

for ID, user, PR, NUM, VIR, RE, MEH, S, CPU, MM, TIMESTA, INFO in islice(rs, 2, None): 
    IDs.append(ID) 
    users.append(user) 
    PRs.append(PR) 
    NUMs.append(NUM) 
    VIRs.append(VIR) 
    REs.append(RE) 
    MEHs.append(MEH) 
    Ss.append(S) 
    CPUs.append(CPU) 
    MMs.append(MM) 
    TIMESTAs.append(TIMESTA) 
    INFOs.append(INFO) 

print IDs, CPUs, MMs, INFOs 

輸入(test.log中):

Wed Apr 23 00:00:13 GMT 2014 
ID USER PR NUM VIR RE MEH S CPU MM TIMESTA INFO 
1555 root 19 0 3162m 1.7g 8192 S 34.6 22.1 955:04.48 resource 
1566 nobody 19 0 2172m 2.9g 8192 S 22.6 33.1 955:04.48 resource2 

輸出:

['1555', '1566'] ['34.6', '22.6'] ['22.1', '33.1'] ['resource', 'resource2'] 
+0

輝煌我會嘗試這個,謝謝 – user3216736

+0

我得到一個「ValueError:太多的值來解壓縮」 – user3216736

+0

@ user3216736:如果你上傳'test.log',我可以精確地建議。 –