2011-02-18 28 views
0

我是編程新手,但我決定採用python。在Python中用raw_input查詢csv

我有用戶約登錄小時這個CSV文件看起來大致是這樣的(但含有大約200行):

用戶,項目,時間
用戶1,項目A,5
用戶1,項目B ,10
用戶2,項目A,7
用戶2,項目B,12`

我想從其中提取數據,通過幾個raw_inputs那會依賴於以前。例如。我會首先詢問你是否想看完整列表,如果是,打印所有內容並關閉。如果答案是否定的,那麼繼續下一個raw_input,例如。輸入您想要查看的用戶。

我有一些代碼,但我知道它仍然是非常基本的,但由於我是這個新手,我一直無法找出解決方案。幫助表示讚賞..

import csv 
reader = csv.reader(open("loggedhours.csv", "rb")) 
Team = raw_input("Do you want to see detailed team numbers? Y/N: ") 

if Team =="y": 
    for User, Project, Hours in reader: 
     print User, Project, Hours 

else: 
    print "ok" 
    print "" 

User = raw_input("Enter user ID you wish to check: ") 

if User == User in reader: 
    for User, Project, Hours in reader: 
     print User 
else: 
    print "ok" 

顯然有一些行缺少第二個raw_input之前,這將使程序完成。

但是,在回答== y時我也得到了正確的結果,但在回答!= y時我沒有得到正確的結果。 else部分不起作用。

很明顯,那裏有錯誤,但如果你能指引我到正確的道路,我將不勝感激!

+0

你能給我們準確的輸出嗎?它只是不打印其他部分的'ok'部分? – 2011-02-18 10:34:25

+0

它打印所有的結果,所以我想了解爲什麼'其他'部分沒有被考慮。 – janecs 2011-02-18 13:58:42

回答

2

你可以從csv的行建立一個字典。

teams = {} 
reader = csv.reader(open("loggedhours.csv", "rb")) 
for team in reader: 
    teams[team[0]] = (team[1], team[2]) 

def print_teamnumbers(): 
    for user in teams: 
     print "%s: %s" % (user, teams[user]) 

def specific_lookup(user_id): 
    print teams.get(user_id, "User not found") 
2

雅各布的回答是一個很好看的。回答「錯誤」:

if User == User in reader 

這顯然是錯誤的。 User == UserTrue,它不可能在reader對象中。

如果您想打印一個空行,在使用print ""代替,只要使用此:

print 

此外,每次使用上限爲您的變量名的時候,一隻小貓死的地方。請閱讀PEP8並保存小貓。