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中with语句的用法
Apr 15 Python
python发送HTTP请求的方法小结
Jul 08 Python
pyspark 读取csv文件创建DataFrame的两种方法
Jun 07 Python
自学python的建议和周期预算
Jan 30 Python
Python玩转Excel的读写改实例
Feb 22 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 Python
python使用PIL和matplotlib获取图片像素点并合并解析
Sep 10 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
Python经纬度坐标转换为距离及角度的实现
Nov 01 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
Dec 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
用libTemplate实现静态网页的生成
2006/10/09 PHP
php 服务器调试 Zend Debugger 的安装教程
2009/09/25 PHP
php htmlspecialchars加强版
2010/02/16 PHP
百度实时推送api接口应用示例
2014/10/21 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
Yii框架弹出框功能示例
2017/01/07 PHP
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
给应用部分的js代码设定一个统一的入口
2014/06/15 Javascript
基于javascript实现tab选项卡切换特效调试笔记
2016/03/30 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
深究AngularJS中$sce的使用
2017/06/12 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
详解滑动穿透(锁body)终极探索
2019/04/16 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
Vuex 模块化使用详解
2019/07/31 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
浅谈使用nodejs搭建web服务器的过程
2020/07/20 NodeJs
Vue Router中应用中间件的方法
2020/08/06 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
浅谈Python中数据解析
2015/05/05 Python
在Django的URLconf中进行函数导入的方法
2015/07/18 Python
Numpy 将二维图像矩阵转换为一维向量的方法
2018/06/05 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
Python 如何实现访问者模式
2020/07/28 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
《月光启蒙》教学反思
2014/03/01 职场文书
消防工作实施方案
2014/06/09 职场文书
新闻报道策划方案
2014/06/11 职场文书
个人租房协议书范本
2014/09/30 职场文书
预备党员半年考察意见
2015/06/01 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书