其他模塊

1赊舶,time 和 datetime 模塊


import time
# 時(shí)間戳(1970年1月1日淤刃,秒計(jì)算)
>>> print(time.time())
1629797436.9953249


>>> print(time.strftime("%Y-%m-%d %X"))
2021-08-24 17:32:43



import datetime

>>> print(datetime.datetime.now())
2021-08-24 17:25:27.262004

>>> print(datetime.date.fromtimestamp(time.time()) )
2021-08-24


# 當(dāng)前時(shí)間+3天
>>> print(datetime.datetime.now() + datetime.timedelta(3))
2021-08-27 17:34:20.375315

# 當(dāng)前時(shí)間-3天
>>> print(datetime.datetime.now() + datetime.timedelta(-3))
2021-08-21 17:35:27.432718


# 當(dāng)前時(shí)間往后+3小時(shí)(往后倒3小時(shí)則負(fù)數(shù)-3表示)
>>> print(datetime.datetime.now() + datetime.timedelta(hours=3))
2021-08-24 20:36:12.993908


# 當(dāng)前時(shí)間往后+30分鐘(往后倒30分鐘則負(fù)數(shù)-30表示)
>>> print(datetime.datetime.now() + datetime.timedelta(minutes=30))
2021-08-24 18:06:44.703444



# 時(shí)間替換晒他,不會真的改變實(shí)際時(shí)間
>>> c_time  = datetime.datetime.now()
>>> print(c_time)
2021-08-24 17:38:20.041454

>>> print(c_time.replace(minute=3,hour=2))
2021-08-24 02:03:20.041454

>>> print(c_time)
2021-08-24 17:38:20.041454


2,random模塊

import random

# 0-1之間的小數(shù)
print(random.random())

# 大于等于1且小于等于4的整數(shù)
print(random.randint(1,4))



#大于等于1且小于4的整數(shù)(不包括4)
print(random.randrange(1,4))



# choice后面跟列表或者元祖逸贾,隨機(jī)列表或元祖的一個(gè)數(shù)字(不一定是數(shù)字)
print(random.choice([1,33,[3,4],'ab']))
print(random.choice((1,33,[3,4],'ab')))


# 隨機(jī)從列表里選出2個(gè)元素
print(random.sample([1,33,[3,4],'ab'],2))



# 大于1小于4的小數(shù)
print(random.uniform(1,4))




#打亂順序
l=[1,2,3,4,5]
random.shuffle(l)
print(l)
#[5, 4, 2, 1, 6]



# 示例:生成隨機(jī)驗(yàn)證碼
def make_code(n):
    res=''
    for i in range(n):
        s1=str(random.randint(0,9))
        s2=chr(random.randint(65,90))
        res+=random.choice([s1,s2])
    return res

print(make_code(7))
# YR1OWO9

3陨仅,os模塊

os模塊是與操作系統(tǒng)交互的一個(gè)接口

# 獲取當(dāng)前目錄,相當(dāng)于shell下的pwd
>>> os.getcwd()
'/Users/shg'


# 切換工作目錄铝侵,相當(dāng)于shell下的cd(r的作用是注視引號內(nèi)的特殊意思)
>>> os.chdir(r"http://Users/shiheng/Desktop")
>>> os.getcwd()
'/Users/shg/Desktop'




# 創(chuàng)建遞歸文件夾
>>> os.makedirs('a/b/c')

# 創(chuàng)建單級目錄
>>> os.mkdir('a')


# 修改文件夾名
>>> os.rename('a','aa')


# 遞歸刪除(路徑必須要寫完整)
>>> os.removedirs('aa/b/c')

# 單級刪除灼伤,刪除c目錄 (刪除單級空目錄,若目錄不為空則無法刪除咪鲜,報(bào)錯(cuò))
>>> os.rmdir('a/b/c')


import os

# 將path分割成目錄和文件名二元組返回
print(os.path.split(r'/Users/sg/PycharmProjects/py-study/正則表達(dá)式/正則.py'))
# ('/Users/sg/PycharmProjects/py-study/正則表達(dá)式', '正則.py')


# 返回path的目錄狐赡。其實(shí)就是os.path.split(path)的第一個(gè)元素
print(os.path.dirname(r'/Users/sg/PycharmProjects/py-study/正則表達(dá)式/正則.py'))
# /Users/sg/PycharmProjects/py-study/正則表達(dá)式


# 返回path最后的文件名
print(os.path.basename(r'/Users/sg/PycharmProjects/py-study/正則表達(dá)式/正則.py'))
# 正則.py


# os.path.exists(path),路徑存在返回True,不存在返回False
print(os.path.exists(r'/User/py-study/正則表達(dá)式/正則.py'))
# False




# os.path.isabs(path)  如果path是絕對路徑疟丙,返回True
print(os.path.isdir(r'/root/a.txt'))


# 拼接路徑
print(os.path.join('/root','etc','a.txt'))
# /root/etc/a.txt



# normpath
BASE_DIR=os.path.normpath(os.path.join(
    os.path.abspath(__file__),
    '..',
    '..'
))

print(BASE_DIR)
# /Users/shiheng/PycharmProjects/py-study



# 等同于
BASE_DIR2=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
print(BASE_DIR2)
# /Users/shiheng/PycharmProjects/py-study

補(bǔ)充

os.getcwd() 獲取當(dāng)前工作目錄颖侄,即當(dāng)前python腳本工作的目錄路徑
os.chdir("dirname")  改變當(dāng)前腳本工作目錄;相當(dāng)于shell下cd
os.curdir  返回當(dāng)前目錄: ('.')
os.pardir  獲取當(dāng)前目錄的父目錄字符串名:('..')
os.makedirs('dirname1/dirname2')    可生成多層遞歸目錄
os.removedirs('dirname1')    若目錄為空隆敢,則刪除发皿,并遞歸到上一級目錄,如若也為空拂蝎,則刪除穴墅,依此類推
os.mkdir('dirname')    生成單級目錄;相當(dāng)于shell中mkdir dirname
os.rmdir('dirname')    刪除單級空目錄温自,若目錄不為空則無法刪除玄货,報(bào)錯(cuò);相當(dāng)于shell中rmdir dirname
os.listdir('dirname')    列出指定目錄下的所有文件和子目錄悼泌,包括隱藏文件松捉,并以列表方式打印
os.remove()  刪除一個(gè)文件
os.rename("oldname","newname")  重命名文件/目錄
os.stat('path/filename')  獲取文件/目錄信息
os.sep    輸出操作系統(tǒng)特定的路徑分隔符,win下為"\\",Linux下為"/"
os.linesep    輸出當(dāng)前平臺使用的行終止符馆里,win下為"\t\n",Linux下為"\n"
os.pathsep    輸出用于分割文件路徑的字符串 win下為;,Linux下為:
os.name    輸出字符串指示當(dāng)前使用平臺隘世。win->'nt'; Linux->'posix'
os.system("bash command")  運(yùn)行shell命令可柿,直接顯示
os.environ  獲取系統(tǒng)環(huán)境變量
os.path.abspath(path)  返回path規(guī)范化的絕對路徑
os.path.split(path)  將path分割成目錄和文件名二元組返回
os.path.dirname(path)  返回path的目錄。其實(shí)就是os.path.split(path)的第一個(gè)元素
os.path.basename(path)  返回path最后的文件名丙者。如何path以/或\結(jié)尾复斥,那么就會返回空值。即os.path.split(path)的第二個(gè)元素
os.path.exists(path)  如果path存在械媒,返回True目锭;如果path不存在,返回False
os.path.isabs(path)  如果path是絕對路徑纷捞,返回True
os.path.isfile(path)  如果path是一個(gè)存在的文件痢虹,返回True。否則返回False
os.path.isdir(path)  如果path是一個(gè)存在的目錄主儡,則返回True奖唯。否則返回False
os.path.join(path1[, path2[, ...]])  將多個(gè)路徑組合后返回,第一個(gè)絕對路徑之前的參數(shù)將被忽略
os.path.getatime(path)  返回path所指向的文件或者目錄的最后存取時(shí)間
os.path.getmtime(path)  返回path所指向的文件或者目錄的最后修改時(shí)間
os.path.getsize(path) 返回path的大小

4缀辩,sys模塊

示例

#1 sys.argv           命令行參數(shù)List臭埋,第一個(gè)元素是程序本身路徑
#2 sys.exit(n)        退出程序,正常退出時(shí)exit(0)
#3 sys.version        獲取Python解釋程序的版本信息
#4 sys.maxint         最大的Int值
#5 sys.path           返回模塊的搜索路徑,初始化時(shí)使用PYTHONPATH環(huán)境變量的值
#6 sys.platform       返回操作系統(tǒng)平臺名稱



#!/usr/bin/env python

import sys
import os

if len(sys.argv) != 2:
    print('Usage: ./vpn_clear.py username')
    sys.exit()

username = sys.argv[1]


def clear_ipsec_conf(username):
    """
    clear /etc/strongswan/ipsec.conf
    """
    os.chdir('/etc/strongswan/')
    with open('ipsec.conf', mode='rt') as f1, \
            open('.tmp.swp', mode='wt') as f2:
        tag = 0

        for line in f1:
            res = line.strip('\n').endswith(username)
            if res:
                tag = 1

            if tag == 1 and line.strip() == '':
                tag = 0

            if tag == 0:
                f2.write(line)

    os.remove('ipsec.conf')
    os.rename('.tmp.swp', 'ipsec.conf')



打印進(jìn)度條

import time
def progress(percent,width=50):
    if percent >=1:
        percent=1
    show_str=('[%%-%ds]' % width) % ('#' * int(width*percent))
    print('\r%s %d%%' %(show_str,int(100*percent)),end='')

recv_size=0
total_size=102312
while recv_size < total_size:
    time.sleep(0.1)
    recv_size+=1024
    progress(recv_size/total_size)

5液斜,shutil模塊

# 如圖3


#1,shutil.copyfileobj將文件內(nèi)容拷貝到另一個(gè)文件中
import shutil
shutil.copyfileobj(open('正則.py','r'),open('new.xml','w'))


執(zhí)行后會新建個(gè)文件new.xml







# 2,shutil.copyfile拷貝我文件始鱼,目標(biāo)文件不需要存在
import shutil

shutil.copyfile('new.xml','bb.xml')





 

#3,shutil.copymode(src, dst)
僅拷貝權(quán)限会烙。內(nèi)容、組、用戶均不變

shutil.copymode('f1.log', 'f2.log') #目標(biāo)文件必須存在






#4,shutil.copy(src, dst) 拷貝文件和權(quán)限

import shutil
shutil.copy('f1.log', 'f2.log')






#5,shutil.copytree遞歸拷貝(目標(biāo)目錄一定不能存在

# 遞歸拷貝)
import shutil

shutil.copytree('/Users/sg/PycharmProjects/py-study/日志模塊','new_日志模塊',ignore=shutil.ignore_patterns('s*'))

#以上把Users/sg/PycharmProjects/py-study/日志模塊文件夾的所有內(nèi)容拷貝到“new_日志模塊”文件夾讥巡,并且忽略s開頭的文件






#6抬驴,import shutil  遞歸刪除

# 遞歸刪除(刪除文件夾及其所有的內(nèi)容)
import shutil

shutil.rmtree('new_日志模塊')





#7,shutil.move (類似于move)
# 類似mv命令
import shutil

shutil.move('new_日志模塊','hello')






#8按傅,shutil.make_archive壓縮文件

# 把/Users/sg/PycharmProjects/py-study/路徑下的"日志模塊"打包在當(dāng)前路徑命名為bak
(注意不需要自己家tar.gz后綴)

import  shutil
ret=shutil.make_archive('bak','gztar',root_dir='/Users/sg/PycharmProjects/py-study/日志模塊')

當(dāng)前路徑會出現(xiàn)這個(gè)壓縮包 bak.tar.gz






#9, 解壓
import tarfile
t=tarfile.open('bak.tar.gz','r')
t.extractall('mmmm')
t.close()

把bak.tar.gz解壓為mmmm文件








#10芙委,zip壓縮
import zipfile
z=zipfile.ZipFile('zzbak.zip','w')
z.write('正則.py')
z.close

會把當(dāng)前的正則.py文件壓縮為zzbak.zip






#11逞敷,zip解壓
import zipfile
z=zipfile.ZipFile('zzbak.zip','r')
z.extractall(path='ppp')

解壓文件zzbak.zip,解壓到當(dāng)前目錄ppp下(ppp目錄不存在會自動創(chuàng)建)








#12灌侣,tar壓縮
import tarfile
# t=tarfile.open('ooooo','w')
# t.add('a.py',arcname='a.bak')
# t.add('b.py',arcname='b.bak')
# t.close()
a.py壓縮為a.bak
b.py壓縮為b.bak
放在ooooo這個(gè)壓縮包里






#13推捐,tar解壓
import tarfile

t=tarfile.open('ooooo','r')
t.extractall('ppp')
t.close()


打開壓縮包ooooo,解壓到當(dāng)前目錄ppp下

圖3

6侧啼,序列化json

# json不識別單引號

import json
dic={'name':'mz','age':22,'sex':'female'}
print(type(dic))
# <class 'dict'>


j=json.dumps(dic)
print(type(j))
# <class 'str'>



f=open('序列化對象','w')
f.write(j)
f.close()
# 會在當(dāng)前目錄下生成一個(gè)"序列化對象"內(nèi)容為 {"name": "mz", "age": 22, "sex": "female"}


# 把存到文件的內(nèi)容讀取到內(nèi)存(反序列化)
f=open('序列化對象','r')
data=json.loads(f.read())


7牛柒,pickle

# pick是byte類型

import pickle
dic={'name':'mmz','age':22,'sex':'female'}
print(type(dic))
# <class 'dict'>



j=pickle.dumps(dic)
print(type(j))
# <class 'bytes'>


f=open('序列化對象pickle','wb')
f.write(j)
f.close()



# 會生成一個(gè)"序列化對象的文件"堪簿,以bytes類型記錄dic




import pickle
f=open('序列化對象pickle','rb')
data=pickle.loads(f.read())

print(data)
# {'name': 'mmz', 'age': 22, 'sex': 'female'}


print(data['name'])
# mmz


print(data['age'])
# 22





#總結(jié):
JSON和Python內(nèi)置的數(shù)據(jù)類型對應(yīng)如下(不是所有的python類型都可以轉(zhuǎn)化為json)
pickle 以 bytes類型大多數(shù)都支持


8, shelve模塊

# a.txt文件本身不存在
import shelve
f=shelve.open('a.txt')


f['info1']={"name":"mz1","age":13,"sex":"female"}
f['info2']={"name":"mz2","age":23,"sex":"male"}
f['info3']={"name":"mz3","age":33,"sex":"female"}


#以上內(nèi)容保存到文件后皮壁,注釋掉椭更,執(zhí)行以下命令
print(f['info1']['name'])
# mz1

f.close()
#執(zhí)行close后,便在得不出結(jié)果

待更新

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛾魄,一起剝皮案震驚了整個(gè)濱河市虑瀑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌滴须,老刑警劉巖舌狗,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扔水,居然都是意外死亡痛侍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門魔市,熙熙樓的掌柜王于貴愁眉苦臉地迎上來主届,“玉大人,你說我怎么就攤上這事待德【。” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵磅网,是天一觀的道長谈截。 經(jīng)常有香客問我,道長涧偷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任毙死,我火速辦了婚禮燎潮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘扼倘。我一直安慰自己确封,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布再菊。 她就那樣靜靜地躺著爪喘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪纠拔。 梳的紋絲不亂的頭發(fā)上秉剑,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機(jī)與錄音稠诲,去河邊找鬼侦鹏。 笑死诡曙,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的略水。 我是一名探鬼主播价卤,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼渊涝!你這毒婦竟也來了慎璧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤跨释,失蹤者是張志新(化名)和其女友劉穎胸私,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煤傍,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡盖文,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蚯姆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片五续。...
    茶點(diǎn)故事閱讀 38,605評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖龄恋,靈堂內(nèi)的尸體忽然破棺而出疙驾,到底是詐尸還是另有隱情,我是刑警寧澤郭毕,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布它碎,位于F島的核電站,受9級特大地震影響显押,放射性物質(zhì)發(fā)生泄漏扳肛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一乘碑、第九天 我趴在偏房一處隱蔽的房頂上張望挖息。 院中可真熱鬧,春花似錦兽肤、人聲如沸套腹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽电禀。三九已至,卻和暖如春笤休,著一層夾襖步出監(jiān)牢的瞬間尖飞,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留葫松,地道東北人瓦糕。 一個(gè)月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像腋么,于是被迫代替她去往敵國和親咕娄。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 一珊擂,什么是模塊圣勒? 常見的場景:一個(gè)模塊就是一個(gè)包含了python定義和聲明的文件,文件名就是模塊名字加上.py的...
    100斤的瘦子_湯勇閱讀 416評論 0 0
  • 常用模塊學(xué)習(xí) 什么是模塊? 為了維護(hù)代碼 提高代碼的可維護(hù)性; 使用模塊可以避免函數(shù)名和變量名沖突; 可重用 模塊...
    drfung閱讀 691評論 1 1
  • 一.time與datetime模塊 1.time模塊的三種形式 1.時(shí)間戳:從1970年到現(xiàn)在經(jīng)過的秒數(shù) 作用:用...
    淺笑_7cad閱讀 83評論 0 0
  • @[toc] 1. 模塊 模塊可以是一個(gè)python文件也可以是文件夾摧扇。 1.1 內(nèi)置模塊 python模塊內(nèi)部提...
    Erics1996閱讀 1,464評論 0 1
  • 一圣贸、logging模塊 目錄結(jié)構(gòu)如下: 二、re模塊什么是正則扛稽?正則就是用一些具有特殊含義的符號組合到一起(稱為正...
    張大志的博客閱讀 257評論 0 0