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代表是

例子

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

 


免責聲明!

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



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