在Python中使用raw_input查询csv

时间:2011-02-18 10:23:53

标签: python csv raw-input

我是编程新手,但我决定接受python。

我有这个csv文件关于用户的记录小时数,看起来大致相同(但包含大约200行):

  

用户,项目,小时
  用户1,项目A,5
  用户1,项目B,10
  用户2,项目A,7
  用户2,项目B,12`

我想通过几个依赖于前一个的raw_input从中提取数据。例如。我首先询问你是否想要查看完整列表,如果是,则打印所有内容并关闭。如果答案为否,则转到下一个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部分无效。

很明显那里有错误,但如果你能引导我走上正确的道路,我将不胜感激!

3 个答案:

答案 0 :(得分:2)

你可以从csv的行中构建一个dict。

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") 

答案 1 :(得分:2)

Jakob的回答很好。回答“错误”:

if User == User in reader

这显然是错误的。 User == UserTrue,不太可能位于reader对象中。

如果你想打印一个空行,而不是使用print "",只需使用它:

print

此外,每当你使用大写字母作为变量名时,小猫就会死在某处。请阅读PEP8并保存小猫。

答案 2 :(得分:0)

如果要退出python程序,请使用sys.exitPython documentation