用于跟踪工作日/小时的工时表程序?
假设我写了一个程序,用来记录我工作的天数和小时数,我会用字典吗?我该怎么区分第一周的星期一和第二周的星期一呢?我怎么才能在关闭程序后保存这些信息?(Python语言)
3 个回答
我可能会为每一周或者每个发薪周期创建一个时间表对象。每个时间表对象可以包含几天的记录,里面有工作小时数或者打卡的时间。
如果是要在网站上保存这些数据,我会使用像mysql这样的数据库。如果是一个在单台机器上运行的应用程序,我可能会用pickle,或者直接用一个简单的文件系统。
我在为自己设计这个应用时,采取了相反的方式。
根据我的经验,时间记录应用最大的麻烦就是数据输入。所以我决定让我的应用使用最简单、最灵活的数据输入工具:文本编辑器。我会在一个文本文件里记笔记,并把时间记录的内容夹在里面,所以一段示例看起来是这样的:
Monday 5/10/09
release script ok this week
open a case on the whole code-table-foreign-key thing
- CUS1 2.0 Generate and release version 1.0.45.
need to get dma to spec out the RESPRB configuration, see case 810
MH section complete - one to go!
- CUS2 4.0 Configure and test Mental Health section.
Tuesday 5/11/09
... and so on
我每天开始时都会用正确的标题,实际的时间记录格式也很简单。只需要一个简单的扫描器和状态机就能提取数据——基本上,我只需要找出以工作日或短横线开头的行,其他的内容就可以忽略。
为了让程序在解析笔记文件时不会变得太慢,我每年都会创建一个新的笔记文件。(即使在十二月底,解析过程也不会超过1/16秒。)
如果我需要处理成百上千人的时间记录,我就不会这样做,因为用户必须要有一点概念,而且解析时间过一段时间后会开始累积。另一方面,把这些数据保存在一个人类可读的文本文件中,我还可以存放其他东西(并进行版本控制、比较等),这真的是非常有用。
字典是一种很好的方式,可以在程序运行时存储数据。
如果你想让数据在关闭程序后还能保留,有几种方法可以做到。Python 有两个模块,叫做 pickle 和 shelve,它们都很有用且容易上手。不过,这些模块有个问题,就是你不能在 Python 程序外面轻松查看数据。还有一些模块可以读取和写入文本文件,支持 JSON 和 XML 格式,其中 JSON 格式在文本编辑器中特别容易阅读。如果你还不熟悉数据库,比如 MySQL,那对于你提到的个人程序来说,这些数据库可能太复杂了,除非你愿意花时间去学习如何使用它们,否则选择一个简单的解决方案会更好。
至于第一周和第二周的星期一,你有很多选择。你可以使用实际的日期(我觉得这是个好主意),或者你可以用元组作为字典的键,比如 ("Monday", 1)。主要的规则是,字典的键必须是不可变的(比如整数、字符串、元组——而且元组里只能包含不可变的对象等),但字典和列表等是不可用的。