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发送邮件接收邮件示例分享
Jan 21 Python
Python中subprocess的简单使用示例
Jul 28 Python
Python标准库笔记struct模块的使用
Feb 22 Python
Python嵌套列表转一维的方法(压平嵌套列表)
Jul 03 Python
python 二维数组90度旋转的方法
Jan 28 Python
python word转pdf代码实例
Aug 16 Python
Python中低维数组填充高维数组的实现
Dec 02 Python
python super函数使用方法详解
Feb 14 Python
python爬虫实例之获取动漫截图
May 31 Python
python golang中grpc 使用示例代码详解
Jun 03 Python
python中mongodb包操作数据库
Apr 19 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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之第九天
2006/10/09 PHP
PHP XML数据解析代码
2010/05/26 PHP
php 处理png图片白色背景色改为透明色的实例代码
2018/12/10 PHP
asp.net下利用js实现返回上一页的实现方法小集
2009/11/24 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
jQuery实现新消息闪烁标题提示的方法
2015/03/11 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
js实现文件上传表单域美化特效
2015/11/02 Javascript
javascript创建cookie、读取cookie
2016/03/31 Javascript
jQueryUI Datepicker组件设置日期高亮
2016/10/13 Javascript
解决BootStrap Fileinput手机图片上传显示旋转问题
2017/06/01 Javascript
基于 Immutable.js 实现撤销重做功能的实例代码
2018/03/01 Javascript
JavaScript仿京东轮播图效果
2021/02/25 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
python socket多线程通讯实例分析(聊天室)
2016/04/06 Python
python获取酷狗音乐top500的下载地址 MP3格式
2018/04/17 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python实现二维插值的三维显示
2018/12/17 Python
Python XML转Json之XML2Dict的使用方法
2019/01/15 Python
opencv python 图像轮廓/检测轮廓/绘制轮廓的方法
2019/07/03 Python
python实现超市管理系统(后台管理)
2019/10/25 Python
python实现在线翻译
2020/06/18 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
FC-Moto瑞典:欧洲最大的摩托车服装和头盔商店之一
2018/11/27 全球购物
GUESS Factory加拿大:牛仔裤、服装及配饰
2019/09/20 全球购物
Levi’s西班牙官方网站:李维斯,著名的牛仔裤品牌
2020/08/20 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
如何开发安全的AJAX应用
2014/03/26 面试题
岗位职责的含义
2013/11/17 职场文书
婚庆公司的创业计划书
2014/01/22 职场文书
环保项目建议书
2014/08/26 职场文书
保密工作承诺书
2014/08/29 职场文书
2014年学校德育工作总结
2014/12/05 职场文书
人事行政部各岗位职责说明书!
2019/07/15 职场文书
解析MySQL binlog
2021/06/11 MySQL