1. 程式人生 > >Python 標準庫之 OS

Python 標準庫之 OS

寫在之前

os 模組提供了訪問作業系統服務的功能,它包含的內容比較多,有時候會感覺很神祕。

>>> import os
>>> dir(os)
['DirEntry', 'F_OK', 'MutableMapping', 'O_APPEND', 'O_BINARY', 'O_CREAT', 'O_EXCL', 'O_NOINHERIT', 'O_RANDOM', 'O_RDONLY', 'O_RDWR', 'O_SEQUENTIAL', 'O_SHORT_LIVED', 'O_TEMPORARY', 'O_TEXT', 'O_TRUNC', 'O_WRONLY', 'P_DETACH',
 'P_NOWAIT', 'P_NOWAITO', 'P_OVERLAY', 'P_WAIT', 'PathLike', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'TMP_MAX', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__
name__', '__package__', '__spec__', '_execvpe', '_exists', '_exit', '_fspath', '_get_exports_list', '_putenv', '_unsetenv', '_wrap_close', 'abc', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'close', 'closerange', 'cpu_coun
t', 'curdir', 'defpath', 'device_encoding', 'devnull', 'dup', 'dup2', 'environ', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fdopen', 'fsdecode', 'fsencode', 'fspath', '
fstat', 'fsync', 'ftruncate', 'get_exec_path', 'get_handle_inheritable', 'get_inheritable', 'get_terminal_size', 'getcwd', 'getcwdb', 'getenv', 'getlogin', 'getpid', 'getppid', 'isatty', 'kill', 'linesep', 'link', 'listdir',
'lseek', 'lstat', 'makedirs', 'mkdir', 'name', 'open', 'pardir', 'path', 'pathsep', 'pipe', 'popen', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'replace', 'rmdir', 'scandir', 'sep', 'set_handle
_inheritable', 'set_inheritable', 'spawnl', 'spawnle', 'spawnv', 'spawnve', 'st', 'startfile', 'stat', 'stat_result', 'statvfs_result', 'strerror', 'supports_bytes_environ', 'supports_dir_fd', 'supports_effective_ids', 'suppo
rts_fd', 'supports_follow_symlinks', 'symlink', 'sys', 'system', 'terminal_size', 'times', 'times_result', 'truncate', 'umask', 'uname_result', 'unlink', 'urandom', 'utime', 'waitpid', 'walk', 'write']

這麼多內容就問你怕不怕,當然這麼多的東西我也不可能在這一一介紹,下面我就選幾個常用的介紹一下,目的是為了不斷強化學習方法。當然了,還有另一個好工具 – Google。

操作檔案

在對檔案進行操作的時候,open() 這個內建函式可以開啟檔案,但是如果要對檔案進行重新命名,刪除等操作,就要用到 os 模組的方法。

首先建立一個檔案,命名為 test.py,內容如下:

print('this is a test file.')

然後將這個檔名重新命名為其它名稱:

>>> import os
>>> os.rename('test.py','new.py')

注意這裡要先進入到檔案 test.py 的目錄,然後再進入互動模式,所以直接可以寫檔名,如果不是這樣,則需要將檔名的路徑寫上。在 os.rename 中,第一個是原檔案的名稱,第二個是打算修改為的檔名,然後檢視,可以看到這個檔案:

$ ls ne*
new.py

另外還有一個方法是 os.remove(),首先我們先檢視一下幫助資訊,然後再進行實驗:

>>> help(os.remove)
Help on built-in function remove in module nt:

remove(path, *, dir_fd=None)
    Remove a file (same as unlink()).

下面我直接寫一下如何使用,假設要刪除掉 /usr 下的 a.py

>>> import os
>>> os.remove(/usr/a.py)

這裡再強調一點的是,os.remove() 只能刪除檔案,不能刪除目錄,如果想要刪除目錄那該怎麼辦?我們接著往下看。

操作目錄

1.os.listdir

os.listdir 的作用是顯示目錄中的內容,這個目錄包括子目錄和檔案。

>>> help(os.listdir)
Help on built-in function listdir in module nt:

listdir(path=None)
    Return a list containing the names of the files in the directory.

看完幫助資訊,你一定會覺得這個是一個非常簡單的方法,不過需要注意的是,它返回的值是列表,並且不顯示目錄中某些子目錄或者隱藏檔案。

2.工作目錄

os.getcwd:當前工作目錄; os.chdir:改變當前工作目錄。

這兩個函式具體怎麼用,可以通過 help() 來檢視文件,我在這裡只演示一個例子:

>>> import os
>>> cwd = os.getcwd() #當前目錄
>>> print(cwd)
C:\Users\Administrator\PycharmProjects\sample_use
>>> os.chdir(os.pardir) #進入到上一級
>>> os.getcwd() #當前目錄
'C:\\Users\\Administrator\\PycharmProjects'

3.建立和刪除目錄

os.makedirs,os.removedirs:建立和刪除目錄。

>>> os.removedirs(dir)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python37\lib\os.py", line 239, in removedirs
    rmdir(name)

從報錯資訊來看的話,要刪除某個目錄,則那個目錄必須是空的。

>>> os.getcwd()
'C:\\Users\\Administrator\\PycharmProjects'

這是當前目錄,在這個目錄下再建立一個新的子目錄:

>>> os.makedirs("newtest")
>>> os.chdir("newtest")
>>> os.getcwd()
'C:\\Users\\Administrator\\PycharmProjects\\newtest'

下面把上面剛剛建立的這個目錄刪除,毫無疑問,它是空的。

>>> os.listdir(os.getcwd())
[]
>>> newdir = os.getcwd()
>>> os.removedirs(newdir)

檔案和目錄屬性

不管是在那種作業系統中,都能看到檔案或者目錄的有關屬性,那麼在 os 中,也有這樣一個方法:os.stat()。

>>> import os
>>> f = os.getcwd() #當前目錄
>>> f
'C:\\Users\\Administrator\\PycharmProjects\\sample_use'

顯示這個目錄的有關資訊:

>>> os.stat(f)
os.stat_result(st_mode=16895, st_ino=10133099161724599, st_dev=2788953634, st_nlink=1, st_uid=0, st_gid=0, st_size=4096, st_atime=1536567604, st_mtime=1536567604, st_ctime=1531269583)

從上述的結果中可能看不出什麼,先不要著急,這樣的結果對計算機是友好的,但是對我們來說可算不上友好。如果用下面的方法的話,就友好多了:

>>> ff = os.stat(f)
>>> mt = ff[8]

ff[8] 就是 st_mtime 的值,它代表最後修改檔案的時間,結果如下所示:

>>> mt
1536567629

這樣看還是不夠友好,下面我們用 time 模組來試一試:

>>> import time
>>> time.ctime(mt)
'Mon Sep 10 16:20:29 2018'

這樣看對我們就很友好了。

寫在之後

到這 os 就基本說完了,當然上面寫的只是龐大的 os 中很小很小的一點,如果你想要深入的學習更多的話,還是要多 google 多學習。這一部分的話,建議你還是自己實際動手操作一下的好,光乾瞪眼看著,看不出什麼東西來。

更多內容,歡迎關注公眾號「Python空間」,期待和你的交流。

在這裡插入圖片描述