python中关于日期时间处理的问答集锦


Posted in Python onMarch 08, 2013

如何在安装setuptools模块时不生成egg压缩包而是源码

    Q:如何在安装setuptools模块时不生成egg压缩包而是源码,这样有时可以修改代码进行调试
    A:其实很简单,就在setup.py中的setup函数中增加 zip_safe=False, 参数即可。

    这样安装后的东西不再是一个egg文件了,而是象以前一样的目录结构。

    如何判断一个字符串只包含数字字符
    这是在 Python.list 邮件列表上看到的讨论

    Q:如何判断一个字符串只包含数字字符

    A:一种方法是 a.isdigit()。但这种方法对于包含正负号的数字字符串无效,因此更为准确的为:
        try:
            x = int(aPossibleInt)
            ... do something with x ...
        except ValueError:
            ... do something else ...

    这样更准确一些,适用性也更广。但如果你已经确信没有正负号,使用字符串的isdigit()方法则更为方便。

    知道某天,如何得到上星期的日期
    这是有人向我问的一个问题,记录在下面:

    Q: 我要写的小程序是这样的,写一个python脚本去返回上个星期的天数 in the format "YYYYMMDD"比如日期是20051122,返回结果是:["20051113", "20051114", "20051115", "20051116", "20051117", "20051118", "20051119"]

    A:首先将字符串的'yyyymmdd'转为 (year, mon, day),简单的可以:
         >>> date = '20051122'
         >>> year, mon, day = int(date[:4]), int(date[4:6]), int(date[6:])

    然后使用 datetime 得到一个 datetime 对象
         >>> import datetime
         >>> d = datetime.datetime(year, mon, day)
    因为 datetime 对象可以得到一个天数的星期日数(weekday),根据这个数向前推即可。
         >>> d.weekday()
         1

    文档上说,星期一是 0,则此上面就是星期二。看你的要求是从星期日开始算第一天,因此上个星期六就是:指定日期-它的星期日数-2
    知道星期六了,就知道上个星期的每天时间了
         >>> b = d - datetime.timedelta(d.weekday() + 2)
         >>> days = []
         >>> for i in range(6, -1, -1):
         ...   c = b - datetime.timedelta(i)
         ...   days.append(c.strftime('%Y%m%d'))
         >>> days
         ['20051113', '20051114', '20051115', '20051116', '20051117', '20051118', '20051119']

    如何截取指定长度的汉字

    Q: 我想截取一个指定长度的汉字串,但不想有半个汉字,如何做比较简单
    A: 可以考虑先按长度截取,然后转为unicode,如果成功就返回,如果失败,将长度减1返回即可。示例程序为:
        #coding=gbk
        def clip_hz(s, length):
            t = s[:length]
            try:
                unicode(t, 'gbk')
            except:
                t = s[:length-1]
            return t

        a = '中华人2民as共和国'
        if __name__ == '__main__':
            print clip_hz(a, 9)
            print clip_hz(a, 10)
            print clip_hz(a, 11)
            print clip_hz(a, 12)

    如何在Windows下方便地进入命令行运行程序

     在windows下的cmd窗口中执行python程序,我一般是这样做:

    1. 执行一个reg文件,内容为:

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOTDirectoryshellcmdcommand] 
@="cmd.exe /k "cd %L""

    它的作用是在你的资源管理器上的右键菜单上增加一个菜单,名字为cmd。那么以后你在目录栏中点击一个目录,然后点右键,再执行这个cmd菜单,就会直接进入这个目录的命令行。

    2. 因为已经进入了你的python程序所在的目录,因此直接在命令行下运行:
     Python yourprog.py  即可。

    前提是你已经将 Python 的安装目录加到 PATH 的环境变量中。

    重新设定包的搜索路径,以方便导入子模块
    也许这个题目有些唬人,不过实在不好表述,这是我在读 TaskCoach 时看到的一段代码。
    Q: 我有一个包,已经安装到了 Python 的 lib/site-packages 目录下,我可以通过 import x.sub 方式来导入 x 包的 sub 模块,但我想更方便的使用 import sub 来导入子模块,有没有这样的方法

    A: 要做一点简单的工作。
        import x

        libpath = x.__path__[0]
        sys.path.insert(0, libpath)
        del x

    先导入 x 包,得到它的路径,然后将这个路径加到sys.path(Python的模块搜索路径)的最前面。然后再将 x 模块删除即可。以后再导入 sub 时,可以只使用 import sub 来导入了。
    把这段代码加到启动代码中执行,以后就一直生效了。
    不过 TaskCoach 中不是使用 insert 来处理的,而是使用 append 来做的,这样我觉得不太好。因此如果在 x 包的前面有与你的子模块同名的模块就麻烦了,还是放在最前面保险。
    不过还可以使用 from x import sub 方式来导入,这样更易理解和标准一些。上述的技术是很有趣将其收录,看情况大家自已使用吧。

    子模块如何共享父模块的信息

    Q:一个模块A调用一个模块B,那么B如何访问模块A中的数据

    A:非常简单,在模块B中导入A模块即可

    其实这根本可以不认为是一个技巧,很多人也许就是这样做的。之所以写出来,只是提醒大家,你想到的可能就是可行的办法。因为之前我遇到过这样的问题,也想到这种方法,但感觉似乎并不好。但看了 CherryPy 的源码之后,它就是这样做的。因此我想这其实就是一种可行的办法。

    如何计算时间差

    Q:如何方便的计算两个时间的差,如两个时间相差几天,几小时等

    A:使用datetime模块可以很方便的解决这个问题,举例如下:
        >>> import datetime
        >>> d1 = datetime.datetime(2005, 2, 16)
        >>> d2 = datetime.datetime(2004, 12, 31)
        >>> (d1 - d2).days
        47
    上例演示了计算两个日期相差天数的计算。
        import datetime
        starttime = datetime.datetime.now()
        #long running
        endtime = datetime.datetime.now()
        print (endtime - starttime).seconds

    上例演示了计算运行时间的例子,以秒进行显示。
        >>> d1 = datetime.datetime.now()
        >>> d3 = d1 + datetime.timedelta(hours=10)
        >>> d3.ctime()
    上例演示了计算当前时间向后10小时的时间。

    其 本上常用的类有:datetime和timedelta两个。它们之间可以相互加减。每个类都有一些方法和属性可以查看具体的值,如datetime可以 查看:天数(day),小时数(hour),星期几(weekday())等;timedelta可以查看:天数(days),秒数(seconds) 等。

    如何取得用户的起始目录

    Q:我正在设计一个跨平台的应用,有没有一个统一的方法可以得到某个用户的起始目录

    A:用户的起始目录这里我指的是数据存放的目录,它根据用户的不同,可以由用户保存自已的数据。现在还没有一个统一的方式,下面是我看到的一个函数可以做这件事:
        def getHomeDir():
            ''' Try to find user's home directory, otherwise return current directory.'''
            try:
                path1=os.path.expanduser("~")
            except:
                path1=""
            try:
                path2=os.environ["HOME"]
            except:
                path2=""
            try:
                path3=os.environ["USERPROFILE"]
            except:
                path3=""

            if not os.path.exists(path1):
                if not os.path.exists(path2):
                    if not os.path.exists(path3):
                        return os.getcwd()
                    else: return path3
                else: return path2
            else: return path1

    在使用前记得导入os和os.path模块。

    查看unicode格式的数据

    Q:如果我有一个unicode格式的数据,如列表,如何才可以打印出可显示的格式,我不想看到u'uxxxx'这种样子
    A:我自已写了一个小函数,可以做这件事,只不过没有经过优化。我想如果想显示漂亮最好是修改pprint.py模块,用它用做,不过简单地用来调试应该够了。也许会有点用:)
        def uni_prt(a, encoding=None):
            import sys
            s = []
            if not encoding:
                encoding = sys.getdefaultencoding()
            if isinstance(a, (list, tuple)):
                if isinstance(a, list):
                    s.append('[')
                else:
                    s.append('(')
                for i, k in enumerate(a):
                    s.append(uni_prt(k, encoding))
                    if i<len(a)-1:
                        s.append(', ')
                if isinstance(a, list):
                    s.append(']')
                else:
                    s.append(')')
            elif isinstance(a, dict):
                for i, k in enumerate(a.items()):
                    key, value = k
                    s.append('{%s: %s}' % (uni_prt(key, encoding), uni_prt(value, encoding)))
                    if i<len(a.items())-1:
                        s.append(', ')
            elif isinstance(a, str):
                s.append("'%s'" %a)
            elif isinstance(a, unicode):
                s.append("'%s'" % a.encode(encoding))
            else:
                s.append(str(a))
            return ''.join(s)

    执行如:
    >>> a=unicode('中国', 'cp936')
    >>> print uni_prt([a]*3, 'cp936')
    ['中国', '中国', '中国']
第二个参数为unicode字符转换所使用的编码。缺省为系统缺省编码。

Python 相关文章推荐
python基础教程之获取本机ip数据包示例
Feb 10 Python
python单线程实现多个定时器示例
Mar 30 Python
Python正则表达式教程之一:基础篇
Mar 02 Python
Python+selenium实现截图图片并保存截取的图片
Jan 05 Python
python保存二维数组到txt文件中的方法
Nov 15 Python
python+pyqt5实现24点小游戏
Jan 24 Python
对Python3 序列解包详解
Feb 16 Python
Django框架实现分页显示内容的方法详解
May 10 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
Jun 18 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
Python实现像awk一样分割字符串
Sep 15 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
python局部赋值的规则
Mar 07 #Python
Python 用户登录验证的小例子
Mar 06 #Python
Eclipse + Python 的安装与配置流程
Mar 05 #Python
python将html转成PDF的实现代码(包含中文)
Mar 04 #Python
python发送邮件的实例代码(支持html、图片、附件)
Mar 04 #Python
python用ConfigObj读写配置文件的实现代码
Mar 04 #Python
Python编码时应该注意的几个情况
Mar 04 #Python
You might like
基于PHP服务端图片生成缩略图的方法详解
2013/06/20 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
Jquery 设置标题的自动翻转
2009/10/03 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
尝试在让script的type属性等于text/html
2013/01/15 Javascript
js中的preventDefault与stopPropagation详解
2014/01/29 Javascript
JS文字球状放大效果代码分享
2015/08/19 Javascript
jQuery插件formValidator自定义函数扩展功能实例详解
2015/11/25 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
使用vue.js开发时一些注意事项
2016/04/27 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
AngularJS前端页面操作之用户修改密码功能示例
2017/03/27 Javascript
Vue2.x通用编辑组件的封装及应用详解
2019/05/28 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
小结Python用fork来创建子进程注意事项
2014/07/03 Python
Python实现检测服务器是否可以ping通的2种方法
2015/01/01 Python
python 阶乘累加和的实例
2019/02/01 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
pytorch 求网络模型参数实例
2019/12/30 Python
Python pyautogui模块实现鼠标键盘自动化方法详解
2020/02/17 Python
什么是Python中的匿名函数
2020/06/02 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
pandas apply使用多列计算生成新的列实现示例
2021/02/24 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
有关打架的检讨书
2014/01/25 职场文书
家居饰品店创业计划书
2014/01/31 职场文书
英语故事演讲稿
2014/04/29 职场文书
企业党员一句话承诺
2014/05/30 职场文书
2014年房地产工作总结范文
2014/11/19 职场文书
2015年物业公司保洁工作总结
2015/10/22 职场文书
《宝可梦》动画制作25周年到来 官方发布特别纪念视频
2022/04/01 日漫