python中關(guān)于日期時(shí)間處理的問(wèn)答集錦
如何在安裝setuptools模塊時(shí)不生成egg壓縮包而是源碼
Q:如何在安裝setuptools模塊時(shí)不生成egg壓縮包而是源碼,這樣有時(shí)可以修改代碼進(jìn)行調(diào)試
A:其實(shí)很簡(jiǎn)單,就在setup.py中的setup函數(shù)中增加 zip_safe=False, 參數(shù)即可。
這樣安裝后的東西不再是一個(gè)egg文件了,而是象以前一樣的目錄結(jié)構(gòu)。
如何判斷一個(gè)字符串只包含數(shù)字字符
這是在 Python.list 郵件列表上看到的討論
Q:如何判斷一個(gè)字符串只包含數(shù)字字符
A:一種方法是 a.isdigit()。但這種方法對(duì)于包含正負(fù)號(hào)的數(shù)字字符串無(wú)效,因此更為準(zhǔn)確的為:
try:
x = int(aPossibleInt)
... do something with x ...
except ValueError:
... do something else ...
這樣更準(zhǔn)確一些,適用性也更廣。但如果你已經(jīng)確信沒(méi)有正負(fù)號(hào),使用字符串的isdigit()方法則更為方便。
知道某天,如何得到上星期的日期
這是有人向我問(wèn)的一個(gè)問(wèn)題,記錄在下面:
Q: 我要寫(xiě)的小程序是這樣的,寫(xiě)一個(gè)python腳本去返回上個(gè)星期的天數(shù) in the format "YYYYMMDD"比如日期是20051122,返回結(jié)果是:["20051113", "20051114", "20051115", "20051116", "20051117", "20051118", "20051119"]
A:首先將字符串的'yyyymmdd'轉(zhuǎn)為 (year, mon, day),簡(jiǎn)單的可以:
>>> date = '20051122'
>>> year, mon, day = int(date[:4]), int(date[4:6]), int(date[6:])
然后使用 datetime 得到一個(gè) datetime 對(duì)象
>>> import datetime
>>> d = datetime.datetime(year, mon, day)
因?yàn)?datetime 對(duì)象可以得到一個(gè)天數(shù)的星期日數(shù)(weekday),根據(jù)這個(gè)數(shù)向前推即可。
>>> d.weekday()
1
文檔上說(shuō),星期一是 0,則此上面就是星期二??茨愕囊笫菑男瞧谌臻_(kāi)始算第一天,因此上個(gè)星期六就是:指定日期-它的星期日數(shù)-2
知道星期六了,就知道上個(gè)星期的每天時(shí)間了
>>> 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']
如何截取指定長(zhǎng)度的漢字
Q: 我想截取一個(gè)指定長(zhǎng)度的漢字串,但不想有半個(gè)漢字,如何做比較簡(jiǎn)單
A: 可以考慮先按長(zhǎng)度截取,然后轉(zhuǎn)為unicode,如果成功就返回,如果失敗,將長(zhǎng)度減1返回即可。示例程序?yàn)椋?BR> #coding=gbk
def clip_hz(s, length):
t = s[:length]
try:
unicode(t, 'gbk')
except:
t = s[:length-1]
return t
a = '中華人2民as共和國(guó)'
if __name__ == '__main__':
print clip_hz(a, 9)
print clip_hz(a, 10)
print clip_hz(a, 11)
print clip_hz(a, 12)
如何在Windows下方便地進(jìn)入命令行運(yùn)行程序
在windows下的cmd窗口中執(zhí)行python程序,我一般是這樣做:
1. 執(zhí)行一個(gè)reg文件,內(nèi)容為:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOTDirectoryshellcmdcommand]
@="cmd.exe /k "cd %L""
它的作用是在你的資源管理器上的右鍵菜單上增加一個(gè)菜單,名字為cmd。那么以后你在目錄欄中點(diǎn)擊一個(gè)目錄,然后點(diǎn)右鍵,再執(zhí)行這個(gè)cmd菜單,就會(huì)直接進(jìn)入這個(gè)目錄的命令行。
2. 因?yàn)橐呀?jīng)進(jìn)入了你的python程序所在的目錄,因此直接在命令行下運(yùn)行:
Python yourprog.py 即可。
前提是你已經(jīng)將 Python 的安裝目錄加到 PATH 的環(huán)境變量中。
重新設(shè)定包的搜索路徑,以方便導(dǎo)入子模塊
也許這個(gè)題目有些唬人,不過(guò)實(shí)在不好表述,這是我在讀 TaskCoach 時(shí)看到的一段代碼。
Q: 我有一個(gè)包,已經(jīng)安裝到了 Python 的 lib/site-packages 目錄下,我可以通過(guò) import x.sub 方式來(lái)導(dǎo)入 x 包的 sub 模塊,但我想更方便的使用 import sub 來(lái)導(dǎo)入子模塊,有沒(méi)有這樣的方法
A: 要做一點(diǎn)簡(jiǎn)單的工作。
import x
libpath = x.__path__[0]
sys.path.insert(0, libpath)
del x
先導(dǎo)入 x 包,得到它的路徑,然后將這個(gè)路徑加到sys.path(Python的模塊搜索路徑)的最前面。然后再將 x 模塊刪除即可。以后再導(dǎo)入 sub 時(shí),可以只使用 import sub 來(lái)導(dǎo)入了。
把這段代碼加到啟動(dòng)代碼中執(zhí)行,以后就一直生效了。
不過(guò) TaskCoach 中不是使用 insert 來(lái)處理的,而是使用 append 來(lái)做的,這樣我覺(jué)得不太好。因此如果在 x 包的前面有與你的子模塊同名的模塊就麻煩了,還是放在最前面保險(xiǎn)。
不過(guò)還可以使用 from x import sub 方式來(lái)導(dǎo)入,這樣更易理解和標(biāo)準(zhǔn)一些。上述的技術(shù)是很有趣將其收錄,看情況大家自已使用吧。
子模塊如何共享父模塊的信息
Q:一個(gè)模塊A調(diào)用一個(gè)模塊B,那么B如何訪問(wèn)模塊A中的數(shù)據(jù)
A:非常簡(jiǎn)單,在模塊B中導(dǎo)入A模塊即可
其實(shí)這根本可以不認(rèn)為是一個(gè)技巧,很多人也許就是這樣做的。之所以寫(xiě)出來(lái),只是提醒大家,你想到的可能就是可行的辦法。因?yàn)橹拔矣龅竭^(guò)這樣的問(wèn)題,也想到這種方法,但感覺(jué)似乎并不好。但看了 CherryPy 的源碼之后,它就是這樣做的。因此我想這其實(shí)就是一種可行的辦法。
如何計(jì)算時(shí)間差
Q:如何方便的計(jì)算兩個(gè)時(shí)間的差,如兩個(gè)時(shí)間相差幾天,幾小時(shí)等
A:使用datetime模塊可以很方便的解決這個(gè)問(wèn)題,舉例如下:
>>> import datetime
>>> d1 = datetime.datetime(2005, 2, 16)
>>> d2 = datetime.datetime(2004, 12, 31)
>>> (d1 - d2).days
47
上例演示了計(jì)算兩個(gè)日期相差天數(shù)的計(jì)算。
import datetime
starttime = datetime.datetime.now()
#long running
endtime = datetime.datetime.now()
print (endtime - starttime).seconds
上例演示了計(jì)算運(yùn)行時(shí)間的例子,以秒進(jìn)行顯示。
>>> d1 = datetime.datetime.now()
>>> d3 = d1 + datetime.timedelta(hours=10)
>>> d3.ctime()
上例演示了計(jì)算當(dāng)前時(shí)間向后10小時(shí)的時(shí)間。
其 本上常用的類有:datetime和timedelta兩個(gè)。它們之間可以相互加減。每個(gè)類都有一些方法和屬性可以查看具體的值,如datetime可以 查看:天數(shù)(day),小時(shí)數(shù)(hour),星期幾(weekday())等;timedelta可以查看:天數(shù)(days),秒數(shù)(seconds) 等。
如何取得用戶的起始目錄
Q:我正在設(shè)計(jì)一個(gè)跨平臺(tái)的應(yīng)用,有沒(méi)有一個(gè)統(tǒng)一的方法可以得到某個(gè)用戶的起始目錄
A:用戶的起始目錄這里我指的是數(shù)據(jù)存放的目錄,它根據(jù)用戶的不同,可以由用戶保存自已的數(shù)據(jù)?,F(xiàn)在還沒(méi)有一個(gè)統(tǒng)一的方式,下面是我看到的一個(gè)函數(shù)可以做這件事:
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
在使用前記得導(dǎo)入os和os.path模塊。
查看unicode格式的數(shù)據(jù)
Q:如果我有一個(gè)unicode格式的數(shù)據(jù),如列表,如何才可以打印出可顯示的格式,我不想看到u'uxxxx'這種樣子
A:我自已寫(xiě)了一個(gè)小函數(shù),可以做這件事,只不過(guò)沒(méi)有經(jīng)過(guò)優(yōu)化。我想如果想顯示漂亮最好是修改pprint.py模塊,用它用做,不過(guò)簡(jiǎn)單地用來(lái)調(diào)試應(yīng)該夠了。也許會(huì)有點(diǎn)用:)
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)
執(zhí)行如:
>>> a=unicode('中國(guó)', 'cp936')
>>> print uni_prt([a]*3, 'cp936')
['中國(guó)', '中國(guó)', '中國(guó)']
第二個(gè)參數(shù)為unicode字符轉(zhuǎn)換所使用的編碼。缺省為系統(tǒng)缺省編碼。
相關(guān)文章
如何利用Python快速統(tǒng)計(jì)文本的行數(shù)
這篇文章主要介紹了如何利用Python快速統(tǒng)計(jì)文本的行數(shù),要快速統(tǒng)計(jì)一個(gè)文本文件中的行數(shù),其實(shí)就是要統(tǒng)計(jì)這個(gè)文本文件中換行符的個(gè)數(shù),下面我們就一起進(jìn)入文章看看具體的操作過(guò)程吧2021-12-12python selenium實(shí)現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取
這篇文章主要介紹了python selenium實(shí)現(xiàn)智聯(lián)招聘數(shù)據(jù)爬取,需要的朋友可以參考下2021-04-04Python實(shí)現(xiàn)CAN報(bào)文轉(zhuǎn)換工具教程
這篇文章主要介紹了Python實(shí)現(xiàn)CAN報(bào)文轉(zhuǎn)換工具教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05python3.7實(shí)現(xiàn)云之訊、聚合短信平臺(tái)的短信發(fā)送功能
這篇文章主要介紹了python3.7實(shí)現(xiàn)云之訊、聚合短信平臺(tái)的短信發(fā)送功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09python中的不可變數(shù)據(jù)類型與可變數(shù)據(jù)類型詳解
探尋python的數(shù)據(jù)類型是否可變,也可以更好的理解python對(duì)內(nèi)存的使用情況,下面這篇文章主要給大家介紹了關(guān)于python中不可變數(shù)據(jù)類型與可變數(shù)據(jù)類型的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09Python自動(dòng)化辦公Excel模塊openpyxl原理及用法解析
這篇文章主要介紹了Python自動(dòng)化辦公Excel模塊openpyxl原理及用法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11