【问题标题】:Querying csv with raw_input in Python在 Python 中使用 raw_input 查询 csv
【发布时间】:2011-02-18 10:23:52
【问题描述】:

我是编程新手,但我决定学习 python。

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

用户、项目、时间
用户 1,项目 A,5
用户1,项目B,10
用户 2,项目 A,7
User2,ProjectB,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 之前显然缺少某些行,这将使程序完成。

但在第一部分,当 answer == y 时我得到了正确的结果,但是当 answer != y 时我没有得到正确的结果。 else 部分不起作用。

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

【问题讨论】:

  • 你能给我们你得到的确切输出吗?是不是根本不打印 else 的“ok”部分?
  • 它打印所有结果,所以我试图理解为什么没有考虑“else”部分。

标签: python csv raw-input


【解决方案1】:

您可以从 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】:

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

    if User == User in reader
    

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

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

    print
    

    另外,每次你在变量名中使用大写字母时,都会有一只小猫在某处死去。请阅读PEP8并拯救小猫。

    【讨论】:

    • 要爱小猫
    • 我现在肯定已经杀死了几只小猫,因为我一直在玩代码。谢谢大家的建议,我稍后会测试这个。
    【解决方案3】:

    如果你想退出 python 程序,请使用sys.exit: Python documentation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-06
      • 1970-01-01
      • 1970-01-01
      • 2014-04-06
      • 2010-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多