一、了解模塊導入的基本知識
此部分此處不展開細說import導入,僅寫幾個點目前的認知即可。其它內容待日后有深入理解了再來細說
1、import可以導入的兩種不同的內容
1.1 *.py文件結尾的文件
1.2 package文件
package和文件夾圖標類似,package中又__init__.py的文件
2、模塊導入的幾種導入方式
2.1 from xxx import xxx as xxx
2.2 from xxx import xxx as xxx as xxx 別名
2.3 import xxx
3、import 和 from xxx import 的區別
import xxx的本質是執行py文件,import package是執行__init__.py
from xxx import xxx 的本質是將xxx部分的內容復制到本地,進行調用。
4、需要重點掌握給sys(python解釋器)添加環境變量的方法
4.1 os.path.abs(文件)
4.2 os.path.dirname(絕對路徑)
4.3 sys.path.append()/sys.path.insert()
二、time模塊-->時間模塊
1、要熟悉時間的三種表示方式
1.1、格式化字符串 ‘2018-2-1 11:11:12’
此處的格式我們可以隨意去自定義,其實質是按照固定的格式,從時間的9元組中獲取需要的變量,根據定義的格式輸出字符串
1.2、時間戳
一串數字,用來表示和1970年的時間間隔,單位為s。
注意點:一個時間戳所換算成的時間九元組是固定的。但是,根據時區的不同,python會進行相應的轉換,轉換成當地的時間。在熟悉了這個情況后,在后面的時間表示方式的轉換中,要明確我要轉換成的是標准時間還是當地時間。
1.3、元組 struct_time 9個元素
year (including century, e.g. 1998) 年
month (1-12)月
day (1-31)日
hours (0-23)時
minutes (0-59)分
seconds (0-59)秒
weekday (0-6, Monday is 0)一周第幾天,注意星期一是第0天
Julian day (day in the year, 1-366)一年第幾天,從1開始計
DST (Daylight Savings Time) flag (-1, 0 or 1)是否是夏令時,0代表不是,1代表是
例子
time.struct_time(tm_year=2017, tm_mon=12, tm_mday=31, tm_hour=23, tm_min=27, tm_sec=2, tm_wday=6, tm_yday=365, tm_isdst=0)
4、time模塊的幾個變量
4.1 timezone
表示世界標准時間utc和本地時間的差值,單位為秒。中國的時區比時間標准時間快8小時。
utc - (utc+8)
>>> time.timezone -28800 >>> 28800/3600 8.0
4.2 altzone
UTC和本地夏令時直接的差值,單位為s 我們不使用夏令時,所以此處不做深究,了解即可
>>> time.altzone #夏令時和utc的時間差值 -32400
4.3 time.daylight
是否使用了夏令時,0為不使用
>>> time.daylight 是否使用了夏令時 0
5、time的函數
5.1 time.time() 獲取時間戳
此處獲取的時間戳為utc標准時間與1970的時間間隔。
5.2 time.sleep()
延時多少秒,單位為秒
5.3 time.gmtime()
gmtime() -- convert seconds since Epoch to UTC tuple
將時間戳轉換為utc時間
5.4 time.localtime()
localtime() -- convert seconds since Epoch to local time tuple
將時間戳轉換成本地時間
>>> time.time() 1520614121.487381 >>> time.gmtime(time.time()) time.struct_time(tm_year=2018, tm_mon=3, tm_mday=9, tm_hour=16, tm_min=49, tm_sec=4, tm_wday=4, tm_yday=68, tm_isdst=0) >>> time.localtime(time.time()) time.struct_time(tm_year=2018, tm_mon=3, tm_mday=10, tm_hour=0, tm_min=49, tm_sec=14, tm_wday=5, tm_yday=69, tm_isdst=0) >>>
此程序的說明:注意time.gmtime()與time.localtime()的對比
Time.time()為獲取一個時間戳,需要明確 時間戳其實就是utc與1970的時間差
Time.gmtime(time.time())將時間戳轉換為utc九元組
Time.localtime(time.time())將時間戳轉換為本地時間的九元組,實際就是轉換為標准的九元組后,根據timezone進行換算的
5.5 如何取用時間struct_time-9元組的值
時間元組賦值給變量,變量用.來引用
import time
x=time.gmtime()
print(x)
print(x.tm_year,x.tm_yday)
----------------------------------------
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=26, tm_hour=17, tm_min=22, tm_sec=23, tm_wday=0, tm_yday=57, tm_isdst=0)
2018 57
5.6 strftime()
將元組轉換為標准格式輸出
這里的元組默認為localtime,如果給出元組,則從元組中取值
Time.strftime(格式,元組)
>>> time.strftime('%Y %m %d %X')
'2018 02 10 01:21:43'
5.7 strptime()
將文本格式轉換為元組
Time.strptime(文本,格式)
>>> time.strptime('2018 02 10 01:21:43','%Y %m %d %X')
time.struct_time(tm_year=2018, tm_mon=2, tm_mday=10, tm_hour=1, tm_min=21, tm_sec=43, tm_wday=5, tm_yday=41, tm_isdst=-1)
>>>
注意:tm_isdst這個部分,轉換之后夏令時為-1
5.8 Time.ctime(時間戳)
會轉換為本地時區的 文本形式時間
>>> time.ctime(time.time())#默認傳入time.time()
'Sat Mar 10 01:31:45 2018'
5.9 Time.asctime(time.localtime())默認傳入localtime
從元組取值轉換成固定的格式輸出,和strftime類似
>>> time.asctime(time.gmtime()) 'Fri Mar 9 17:33:26 2018' >>> time.asctime(time.localtime()) 'Sat Mar 10 01:33:32 2018' >>> time.asctime() 'Sat Mar 10 01:33:39 2018'
5.10 time.mktime() -- convert local time tuple to seconds since Epoch
把本地的時間的元組轉換為時間戳
Localtime->轉換為標准的時間戳->utc->local
>>> time.localtime(time.mktime(time.localtime())) time.struct_time(tm_year=2018, tm_mon=3, tm_mday=10, tm_hour=1, tm_min=37, tm_sec=31, tm_wday=5, tm_yday=69, tm_isdst=0) >>>
5.11 tzset() -- change the local timezone
改變timezone變量,調整時區,一般不使用


三、datetime模塊的使用
1、獲取當前時間的方法 datetime.datetime.now()
以字符串形式輸出
print(datetime.datetime.now())當前時間 2018-01-04 02:11:37.867479
2、知道datetime.datetime.now()的類型
<class 'datetime.datetime'>
3、定義輸出格式 與strftime結合
print(datetime.datetime.now())
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
-----------------------------------------
2018-03-10 09:46:28.106559
2018-03-10 09:46:28
4、str格式時間轉成datetime.datetime類
d1 = datetime.datetime.strptime('2015-03-05 17:41:20', '%Y-%m-%d %H:%M:%S')
d2 = datetime.datetime.strptime('2015-03-02 17:31:20', '%Y-%m-%d %H:%M:%S')
Print(d1)
--------------------------------
2015-03-05 17:41:20
5、計算時間差的方法
for i in range(20): d3 = datetime.datetime.now() print(d3-d1) time.sleep(1)
---------------------------------- 2015-03-05 17:41:20 1100 days, 16:05:16.123119
6、與time.timedelta()結合計算時間
print(d1+datetime.timedelta(3)) 三天后的時間 print(d1+datetime.timedelta(-3)) 三天前的時間 Primt(datetime.now+datetime.timedelta(hour=3)) 三小時后的時間 Primt(datetime.now+datetime.timedelta(second0=-3)) 三秒前的時間
7、時間的修改與替換
nownow=datetime.datetime.now() print(type(nownow)) nownow.replace(year=1999) print(nownow,nownow.replace(year=1999)) ----------------- <class 'datetime.datetime'> 2018-01-04 02:31:29.952321 1999-01-04 02:31:29.952321
注意:除非重新賦值給新的變量 不然replace不會去改變變量本身 和字符串類似
四、random 模塊,隨機數模塊的使用
1、random.random()
生成隨機浮點數范圍在0-1之間 包括0不包括1
>>> random.random() 0.11288859525093142
2、random.randint()
生成隨機整數,前數字都包含,即生成的隨機數前后數字都可能出現
>>> random.randint(1,4) 1 >>> random.randint(1,4) 3 >>> random.randint(1,4) 4
3、random.randrange()
顧頭不顧尾的range,可以設置步長,不設置step 則step為1.
randint不能設置步長step
>>> random.randrange(0,11,2) 4 >>> random.randrange(0,11,2) 8 >>> random.randrange(0,11,2) 0
4、random.choice()
放入一個非空序列 列表 字符串 元組(有序的,放入字典、集合會報錯)
>>> random.choice((1,2,3,4)) #元組
3
>>> random.choice((1,2,3,4))
2
>>> random.choice(['a','b','c'])
'c'
>>> random.choice(['a','b','c'])
'a'
>>> random.choice('python') #字符串
'y'
>>> random.choice('python')
'o'
5、random.sample()取多個,與choice類似,choice取1個,sample取多個
放入一個非空序列,第二個參數表示抽取多少個,組成列表
>>> random.sample(['a','b','c'],2)
['b', 'c']
>>> random.sample('python',6)
['o', 't', 'h', 'p', 'y', 'n']
6、random.uniform() 指定區間的浮點數
和random.random做對比 random只是0和1之間
>>> random.uniform(1,4) 1.5855347763788947 >>> random.uniform(1,4) 3.890550444129729
7、洗牌功能 random.shuffle()對列表進行亂序
同時要注意是他可以直接改變列表 不需要重新賦值出來
>>> a=[1,2,3,4] >>> random.shuffle(a) >>> a ----------------------------- [4, 1, 3, 2]
8、生成驗證碼的程序一則
思路
random.randint(0-9)
random.randint(65-90)
Chr(數字)->字符
字符串相加 ‘abc’+’d’=’abcd’
def yanzheng():
yanzhengma=''
for i in range(4):
shuzi_or_zimu = random.randint(0, 1)
if shuzi_or_zimu:
yanzhengma+=str(random.randint(0,9))
else:
yanzhengma+=chr(random.randint(65,90))
print(yanzhengma)
for i in range(5):
yanzheng()
----------------------------
1F47
YR31
R80M
66FG
F6GS
五、os模塊
os模塊分兩個部分來講:1、 常用函數 2、os.path
(一)os的常用函數
1、os.getcwd() 相當於pwd
獲取當前python程序運行的路徑 你這個.py文件在哪 他就顯示哪
2、os.chdir()
相當於linux的cd 到相應目錄項進行操作
注意的是chdir的時候
對於目錄\的兩種處理方式
2.1、\\
2.2、r
>>> os.getcwd() 'C:\\Users\\Raytine' >>> os.chdir('d:\') File "<stdin>", line 1 os.chdir('d:\') ^ SyntaxError: EOL while scanning string literal >>> os.chdir('d:\\') >>> os.getcwd() 'd:\\' >>> os.chdir(r'c:\') File "<stdin>", line 1 os.chdir(r'c:\') ^ SyntaxError: EOL while scanning string literal >>> os.chdir(r'c:\\') >>> os.chdir(r'c:\a') >>> os.getcwd() 'c:\\a'
注意:為什么>>> os.chdir(r'c:\')報錯 ,os.chdir(r'c:\')
3、os.curdir 當前目錄 os.pardir 上一級目錄
>>> os.curdir #只是個變量,並不能引用 '.' >>> os.curdir '.' >>> os.pardir
注意點: os.curdir 和os.pardir 都沒有()引用,不是函數
4、os.makedirs(r'c:\a\b\c') 遞歸創建
5、os.removedirs(r'c:\a\b\c')遞歸刪除
刪除原則:目錄為空繼續刪,不能用來刪文件及刪除非空目錄
>>> os.removedirs(r'c:\a\b\1.txt') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Python36\lib\os.py", line 238, in removedirs rmdir(name) NotADirectoryError: [WinError 267] #目錄名稱無效。: 'c:\\a\\b\\1.txt' >>> os.removedirs(r'c:\a\b\c') Traceback (most recent call last): File "<stdin>", line 1, in <module> File "D:\Python36\lib\os.py", line 238, in removedirs rmdir(name) OSError: [WinError 145] #目錄不是空的。: 'c:\\a\\b\\c' >>> os.removedirs(r'c:\a\b\c')
6、os.mkdir() 創建目錄
不會遞歸,如果前面不存在則創建不成功
7、os.rmdir()刪除目錄
不會遞歸,為空刪除
8、os.listdir(os.curdir)
列出文件夾下面的所有文件 以列表形式列出
>>> os.listdir('.') ['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python.pdb' ]
9、os.remove('filename') 刪除文件
10、os.rename('oldname','newname')
可以改文件夾名字以及文件的名字
>>> os.makedirs(r'c:a\b\c\d') >>> os.rename(r'c:a\b\c\d',r'c:a\b\c\e')
11、os.stat() 查看文件的屬性
>>> os.stat(r'c:a\b\c\e') os.stat_result(st_mode=16895, st_ino=1125899906960658, st_dev=2766884258, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1519743765, st_mtime=1519743765, st_ctime=1519743765)
12 os.sep 路徑分隔符 windows \\ linux /
13 os.linesep 換行符 windows \r\r linux \n
14 os.pathsep 分割文件路徑的分隔符 ;
>>> os.pathsep ';' >>> os.linesep '\r\n' >>> os.sep '\\' >>>
注意點:都沒有括號引用
15、os.environ 輸出系統的環境變量 為一個字典
和sys.path 不同 sys.path為python的環境變量
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\linyuming.ESG\\AppData\\Roaming', 'WINDIR': 'C:\\Windows'})
16.os.name 系統名稱
windows 為‘nt’ 獲取系統name針對不同系統做不同操作,增加兼容性
Windows,它是'nt',而對於Linux/Unix用戶,它是'posix'。
>>> os.name 'nt'
17.os.system() 用來執行系統指令
>>> os.system('dir') 驅動器 D 中的卷沒有標簽。 卷的序列號是 D2E8-6B21 D:\Python36 的目錄 2017/12/19 02:50 <DIR> . 2017/12/19 02:50 <DIR> .. 2017/12/19 02:50 <DIR> DLLs 2017/12/19 02:50 <DIR> Doc 2017/12/19 02:48 <DIR> include2017/12/19 02:50 <DIR> libs
(二)os.path 模塊
1、os.path.abspath()
獲取文件的絕對路徑
2、os.path.split() 切割文件路徑
切割成目錄+文件的形式
print(os.path.split(r'c:\a\b\c\d')) #不論文件是否存在 ('c:\\a\\b\\c', 'd')# 返回二元組,第一部分為目錄 第二部分為文件名 #Split=dirname+basename
3、os.path.dirname(r'c:\a\b\c\d.txt')獲取文件的目錄
不論這個文件是否存在,實質就是切割路徑
4 、os.path.basename(r'c:\a\b\c\d.txt') 獲取文件名
這個和dirname相對,basename只取文件名
>>> os.path.dirname(r'c:\a\b\c\d.txt') 'c:\\a\\b\\c' >>> os.path.basename(r'c:\a\b\c\d.txt') 'd.txt' >>> os.path.split(r'c:\a\b\c\d.txt') ('c:\\a\\b\\c', 'd.txt') #linux windows 對於路徑分隔符定義不通 所以運行結果有區別 #上面的路徑都可以不存在
5、os.path.exists()判斷路徑是否存在
可以判斷文件 或者文件夾
>>> os.path.exists(r'c:\a\b\c\d.txt') False
6、os.path.is* 判斷
>>> os.path.isfile(r'c:\a\123') False #文件不存在 false >>> os.path.isfile(r'c:\a\b') False #不是文件 false >>> os.path.isfile(r'c:\a\b\1.txt') True #存在且是文件 true
>>> os.path.isabs(r'c:\\') True >>> os.path.isabs(r'c:') False #寫的格式不對,不是絕對路徑則返回false >>> os.path.isabs(r'c:\\ajsdfiouoiw') True #不存在也返回true
isabs(s)
Test whether a path is absolute
isdir = _isdir(path, /)
Return true if the pathname refers to an existing directory.
isfile(path)
Test whether a path is a regular file
islink(path)
Test whether a path is a symbolic link.
This will always return false for Windows prior to 6.0.
ismount(path)
Test whether a path is a mount point (a drive root, the root of a
share, or a mounted volume)
7、os.path.join 將多個名字組合成路徑
拼接過程不能帶分割符 不然會出現問題
>>> os.path.join('root','tmp','abc') 'root/tmp/abc' >>> os.path.join(r'/','root','tmp','abc') '/root/tmp/abc'
8、getatime/getctime獲取文件的時間
>>> time.localtime(os.path.getatime(r'c:\a\b\1.txt')) time.struct_time(tm_year=2018, tm_mon=2, tm_mday=27, tm_hour=23, tm_min=33, tm_sec=57, tm_wday=1, tm_yday=58, tm_isdst=0) os.path.getatime(file) #輸出最近access訪問時間1318921018.0 os.path.getctime(file) #輸出文件create創建時間 os.path.getmtime(file) #輸出最近修改時間 #返回的是時間戳

六、sys模塊-和解釋器相關的信息及操作
該部分內容較少。
sys.version 獲取python解釋器的版本信息
sys.stdout 標准輸出
sys.argv 獲取參數 第一個參數是py文件路徑
sys.exit()標准退出exit(0)
print(sys.version)#輸出python的信信息 print(sys.argv)#用來獲取參數 第一個元素是程序路徑 3.6.3 (v3.6.3:2c5fed8, Oct 3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] ['F:/my_python_file/20180113_sys_shutil.py']
