python筆記-1(import導入、time/datetime/random/os/sys模塊)


python筆記-6(import導入、time/datetime/random/os/sys模塊)

 

一、了解模塊導入的基本知識

此部分此處不展開細說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代表是

例子

?
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)

?
1
2
3
4
5
6
7
>>> time.timezone
 
- 28800
 
>>> 28800 / 3600
 
8.0

4.2 altzone

UTC和本地夏令時直接的差值,單位為s 我們不使用夏令時,所以此處不做深究,了解即可

?
1
2
3
>>> time.altzone #夏令時和utc的時間差值
 
- 32400

4.3 time.daylight

是否使用了夏令時,0為不使用

?
1
2
3
>>> 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

將時間戳轉換成本地時間

?
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> 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元組的值

時間元組賦值給變量,變量用.來引用

?
1
2
3
4
5
6
7
8
9
10
11
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(格式,元組)

?
1
2
3
>>> time.strftime( '%Y %m %d %X' )
 
'2018 02 10 01:21:43'

 

5.7 strptime()

將文本格式轉換為元組

Time.strptime(文本,格式)

?
1
2
3
4
5
>>> 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(時間戳)

會轉換為本地時區的 文本形式時間

?
1
2
3
>>> time.ctime(time.time()) #默認傳入time.time()
 
'Sat Mar 10 01:31:45 2018'                                         

5.9 Time.asctime(time.localtime())默認傳入localtime

從元組取值轉換成固定的格式輸出,和strftime類似

?
1
2
3
4
5
6
7
8
9
10
11
>>> 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

?
1
2
3
4
5
>>> 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()

以字符串形式輸出

?
1
2
3
print (datetime.datetime.now())當前時間
 
2018 - 01 - 04 02 : 11 : 37.867479

2、知道datetime.datetime.now()的類型

?
1
< class 'datetime.datetime' >

3、定義輸出格式 與strftime結合

?
1
2
3
4
5
6
7
print (datetime.datetime.now())
 
print (datetime.datetime.now().strftime( '%Y-%m-%d %H:%M:%S' ))<br> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
2018 - 03 - 10 09 : 46 : 28.106559
 
2018 - 03 - 10 09 : 46 : 28

4、str格式時間轉成datetime.datetime類

?
1
2
3
4
5
6
7
8
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、計算時間差的方法

?
1
2
3
4
5
6
7
8
9
10
11
for i in range ( 20 ):
 
    d3 = datetime.datetime.now()
 
    print (d3 - d1)
 
    time.sleep( 1 )<br> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 
2015 - 03 - 05 17 : 41 : 20
 
1100 days, 16 : 05 : 16.123119

6、與time.timedelta()結合計算時間

?
1
2
3
4
5
6
7
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、時間的修改與替換

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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

 

?
1
2
>>> random.random()
0.11288859525093142

 

2、random.randint() 

生成隨機整數,前數字都包含,即生成的隨機數前后數字都可能出現

?
1
2
3
4
5
6
>>> random.randint( 1 , 4 )
1
>>> random.randint( 1 , 4 )
3
>>> random.randint( 1 , 4 )
4

 

3、random.randrange()

顧頭不顧尾的range,可以設置步長,不設置step 則step為1.

randint不能設置步長step

 

?
1
2
3
4
5
6
>>> random.randrange( 0 , 11 , 2 )
4
>>> random.randrange( 0 , 11 , 2 )
8
>>> random.randrange( 0 , 11 , 2 )
0

 

4、random.choice()

放入一個非空序列 列表 字符串 元組(有序的,放入字典、集合會報錯)

 

?
1
2
3
4
5
6
7
8
9
10
11
12
>>> 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取多個

 放入一個非空序列,第二個參數表示抽取多少個,組成列表

 

?
1
2
3
4
>>> 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之間

 

?
1
2
3
4
>>> random.uniform( 1 , 4 )
1.5855347763788947
>>> random.uniform( 1 , 4 )
3.890550444129729

 

7、洗牌功能 random.shuffle()對列表進行亂序

 

 同時要注意是他可以直接改變列表 不需要重新賦值出來

 

?
1
2
3
4
5
>>> 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’

 

?
1
2
3
4
5
6
7
8
9
10
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)<br> for i in range ( 5 ):
       yanzheng()<br> - - - - - - - - - - - - - - - - - - - - - - - - - - - -

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']


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM