【问题标题】:Python input validation writing to a csv file?Python输入验证写入csv文件?
【发布时间】:2015-10-26 17:04:34
【问题描述】:

我正在尝试将用户输入写入 csv 文件,并且我想验证该输入。我现在正在尝试日期验证,但一直收到错误消息。 “w.writerow([姓名,日期,员工ID]) NameError:名称“日期”未定义” 我不知道如何解决这个错误。在写入 csv 文件时验证原始用户输入的好方法是什么,这样我就不会收到这些错误? 感谢您的帮助。

这是我的代码:

import csv
from time import strptime
print "Please fill out the following information:"
with open('userinfo.csv', 'a') as f:
    w = csv.writer(f, quoting=csv.QUOTE_ALL)

    name = raw_input("Your name:")
    def get_date():
        while True:
            date = raw_input("Please enter a date in MM/DD/YY format:")
            try:
                parsed = strptime(date, "%m/%d/%Y")
            except ValueError as e:
                print "Could not parse date: {0}".format(e)
            else:
                return parsed[:3]
    year, month, day = get_date()

    employeeid =raw_input("EmployeeID:")
    w.writerow([name,date,employeeid])

【问题讨论】:

  • 你真的不想要w.writerow([name, year, month, day, employeeid])吗? date 仅在 get_date 内部定义
  • 我希望它以 MM/DD/YYYY 格式一起写入,但我不知道如何定义日期以便它实际写入文件。

标签: python validation csv input


【解决方案1】:

date 是在内部范围内定义的(在get_date() 中),当您退出get_date() 时它将被删除,因为解释器确定dateget_date() 的局部变量。

如果你想使用它,你需要从get_date()返回date

注意:如果date最初是在循环或分支而不是函数中定义的,则退出时不会被删除。见Jeremy's answer to Python's scoping

顺便说一句,strptime 不应该是MM/DD/YYYY 格式吗?

【讨论】:

  • 我看到日期是在哪里定义的,但是如何从 get_date() 返回日期?
  • @just return parsed[:3], date。这会将它们作为元组的元组返回。并说,请(year, month, day), _date = get_date() 接收它们。
  • 我认为我没有理解,因为我对这两行进行了这些更改,但仍然收到“日期”未定义错误。你能具体告诉我它在我的代码中的外观吗?
  • 在我的示例中,您需要打印 _date 而不是 date。我只是使用不同的变量名来避免混淆。
  • 应该没有问题。如果您仍然遇到任何问题,只需通过粘贴您的完整代码来编辑您的原始帖子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-07
  • 2019-11-15
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
相关资源
最近更新 更多