日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python学习笔记(十二)标准库os

發布時間:2024/1/23 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python学习笔记(十二)标准库os 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

os 模塊提供了訪問操作系統服務的功能,它所包含的內容比較多。

>>> import os >>> dir(os) ['EX_CANTCREAT', 'EX_CONFIG', 'EX_DATAERR', 'EX_IOERR', 'EX_NOHOST', 'EX_NOINPUT', 'EX_NOPERM', 'EX_NOUSER','EX_OK', 'EX_OSERR', 'EX_OSFILE', 'EX_PROTOCOL', 'EX_SOFTWARE', 'EX_TEMPFAIL', 'EX_UNAVAILABLE', 'EX_USAGE', 'F_OK', 'NGROUPS_MAX', 'O_APPEND', 'O_ASYNC', 'O_CREAT', 'O_DIRECT', 'O_DIRECTORY', 'O_DSYNC', 'O_EXCL', 'O_LARGEFILE', 'O_NDELAY', 'O_NOATIME', 'O_NOCTTY', 'O_NOFOLLOW', 'O_NONBLOCK', 'O_RDONLY', 'O_RDWR', 'O_RSYNC', 'O_SYNC', 'O_TRUNC', 'O_WRONLY', 'P_NOWAIT', 'P_NOWAITO', 'P_WAIT', 'R_OK', 'SEEK_CUR', 'SEEK_END', 'SEEK_SET', 'ST_APPEND', 'ST_MANDLOCK', 'ST_NOATIME', 'ST_NODEV', 'ST_NODIRATIME', 'ST_NOEXEC', 'ST_NOSUID', 'ST_RDONLY', 'ST_RELATIME', 'ST_SYNCHRONOUS', 'ST_WRITE', 'TMP_MAX', 'UserDict', 'WCONTINUED', 'WCOREDUMP', 'WEXITSTATUS', 'WIFCONTINUED', 'WIFEXITED', 'WIFSIGNALED', 'WIFSTOPPED', 'WNOHANG', 'WSTOPSIG', 'WTERMSIG', 'WUNTRACED', 'W_OK', 'X_OK', '_Environ', '__all__', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_copy_reg', '_execvpe', '_exists', '_exit', '_get_exports_list', '_make_stat_result', '_make_statvfs_result', '_pickle_stat_result', '_pickle_statvfs_result', '_spawnvef', 'abort', 'access', 'altsep', 'chdir', 'chmod', 'chown', 'chroot', 'close', 'closerange', 'confstr', 'confstr_names', 'ctermid', 'curdir', 'defpath', 'devnull', 'dup', 'dup2', 'environ', 'errno', 'error', 'execl', 'execle', 'execlp', 'execlpe', 'execv', 'execve', 'execvp', 'execvpe', 'extsep', 'fchdir', 'fchmod', 'fchown', 'fdatasync', 'fdopen', 'fork', 'forkpty', 'fpathconf', 'fstat', 'fstatvfs', 'fsync', 'ftruncate', 'getcwd', 'getcwdu', 'getegid', 'getenv', 'geteuid', 'getgid', 'getgroups', 'getloadavg', 'getlogin', 'getpgid', 'getpgrp', 'getpid', 'getppid', 'getresgid', 'getresuid', 'getsid', 'getuid', 'initgroups', 'isatty', 'kill', 'killpg', 'lchown', 'linesep', 'link', 'listdir', 'lseek', 'lstat', 'major', 'makedev', 'makedirs', 'minor', 'mkdir', 'mkfifo', 'mknod', 'name', 'nice', 'open', 'openpty', 'pardir', 'path', 'pathconf', 'pathconf_names', 'pathsep', 'pipe', 'popen', 'popen2', 'popen3', 'popen4', 'putenv', 'read', 'readlink', 'remove', 'removedirs', 'rename', 'renames', 'rmdir', 'sep', 'setegid', 'seteuid', 'setgid', 'setgroups', 'setpgid', 'setpgrp', 'setregid', 'setresgid', 'setresuid', 'setreuid', 'setsid', 'setuid', 'spawnl', 'spawnle', 'spawnlp', 'spawnlpe', 'spawnv', 'spawnve', 'spawnvp', 'spawnvpe', 'stat', 'stat_float_times', 'stat_result', 'statvfs', 'statvfs_result', 'strerror', 'symlink', 'sys', 'sysconf', 'sysconf_names', 'system', 'tcgetpgrp', 'tcsetpgrp', 'tempnam', 'times', 'tmpfile', 'tmpnam', 'ttyname', 'umask', 'uname', 'unlink', 'unsetenv', 'urandom', 'utime', 'wait', 'wait3', 'wait4', 'waitpid', 'walk', 'write']

這么多內容不能都介紹,況且不少方法在實踐中用的不多,比如 os.popen() 在實踐中用到了,但是 os 模塊還有 popen2、popen3、popen4,這三個我在實踐中都沒有用過,或者有別人用了,也請補充。不過,我下面介紹的都是自認為用的比較多的,至少是我用的比較多或者用過的。如果沒有讀者要是用,但是我這里沒有介紹,讀者也完全可以自己用我們常用的help() 來自學明白其應用方法,當然,還有最好的工具——google(內事不決問 google,外事不明問谷歌,須梯子)。

操作文件:重命名、刪除文件

在對文件操作的時候,open() 這個內建函數可以建立、打開文件。但是,如果對文件進行改名、刪除操作,就要是用 os 模塊的方法了。

首先建立一個文件,文件名為 22201.py,文件內容是:

#!/usr/bin/env python # coding=utf-8print "This is a tmp file."

然后將這個文件名稱修改為其它的名稱。

>>> import os >>> os.rename("22201.py", "newtemp.py")

注意,我是先進入到了文件 22201.py 的目錄,然后進入到 Python 交互模式,所以,可以直接寫文件名,如果不是這樣,需要將文件名的路徑寫上。os.rename("22201.py", "newtemp.py")中,第一個文件是原文件名稱,第二個是打算修改成為的文件名。

$ ls new* newtemp.py

查看,能夠看到這個文件。并且文件內容可以用 cat newtemp.py 看看(這是在 ubuntu 系統,如果是 windows 系統,可以用其相應的編輯器打開文件看內容)。

Help on built-in function rename in module posix:rename(...)rename(old, new)Rename a file or directory.

除了修改文件名稱,還可以修改目錄名稱。請注意閱讀幫助信息。

另外一個 os.remove(),首先看幫助信息,然后再實驗。

Help on built-in function remove in module posix:remove(...)remove(path)Remove a file (same as unlink(path)).

比較簡單。那就測試一下。為了測試,先建立一些文件吧。

$ pwd /home/qw/Documents/VBS/StarterLearningPython/2code/rd

這是我建立的臨時目錄,里面有幾個文件:

$ ls a.py b.py c.py

下面刪除 a.py 文件

>>> import os >>> os.remove("/home/qw/Documents/VBS/StarterLearningPython/2code/rd/a.py")

看看刪了嗎?

$ ls b.py c.py

果然管用呀。再來一個狠的:

>>> os.remove("/home/qw/Documents/VBS/StarterLearningPython/2code/rd") Traceback (most recent call last): File "<stdin>", line 1, in <module> OSError: [Errno 21] Is a directory: '/home/qw/Documents/VBS/StarterLearningPython/2code/rd'

報錯了。我打算將這個目錄下的所剩文件刪光光。這么做不行。注意幫助中一句話 Remove a file,os.remove() 就是用來刪除文件的。并且從報錯中也可以看到,告訴我們錯誤的原因在于那個參數是一個目錄。

要刪除目錄,還得繼續向下學習。

操作目錄

os.listdir:顯示目錄中的文件

Help on built-in function listdir in module posix:listdir(...)listdir(path) -> list_of_stringsReturn a list containing the names of the entries in the directory.path: path of directory to listThe list is in arbitrary order. It does not include the special entries '.' and '..' even if they are present in the directory.

看完幫助信息,讀者一定覺得這是一個非常簡單的方法,不過,特別注意它返回的值是列表,還有就是如果文件夾中有那樣的特殊格式命名的文件,不顯示。在 linux 中,用 ls 命令也看不到這些隱藏的東東。

>>> os.listdir("/home/qw/Documents/VBS/StarterLearningPython/2code/rd") ['b.py', 'c.py'] >>> files = os.listdir("/home/qw/Documents/VBS/StarterLearningPython/2code/rd") >>> for f in files: ... print f ... b.py c.py

import? os

dir = "E:\\testData\\spark\\spark1.6"
files=os.listdir(dir)
for file in files:
??? print file
??? f = open(dir + "\\" + file,'r')
??? print f.readlines()
??? f.close

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

這兩個函數怎么用?惟有通過 help() 看文檔啦。請讀者自行看看。我就不貼出來了,僅演示一個例子:

>>> cwd = os.getcwd() #當前目錄 >>> print cwd /home/qw/Documents/VBS/StarterLearningPython/2code/rd >>> os.chdir(os.pardir) #進入到上一級>>> os.getcwd() #當前 '/home/qw/Documents/VBS/StarterLearningPython/2code'>>> os.chdir("rd") #進入下級>>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code/rd'

os.pardir 的功能是獲得父級目錄,相當于..

>>> os.pardir '..'

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

廢話少說,路子還是前面那樣,就省略看幫助了,讀者可以自己看。直接上例子:

>>> dir = os.getcwd() >>> dir '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' >>> os.removedirs(dir) Traceback (most recent call last):File "<stdin>", line 1, in <module>File "/usr/lib/python2.7/os.py", line 170, in removedirsrmdir(name) OSError: [Errno 39] Directory not empty: '/home/qw/Documents/VBS/StarterLearningPython/2code/rd'

什么時候都不能得意忘形,一定要謙卑。那就是從看文檔開始一點一點地理解。不能像上面那樣,自以為是、貿然行事。看報錯信息,要刪除某個目錄,那個目錄必須是空的。

>>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code'

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

>>> os.makedirs("newrd") >>> os.chdir("newrd") >>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code/newrd'

建立了一個。下面把這個刪除了。這個是空的。

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

按照我的理解,這里應該報錯。因為我是在當前工作目錄刪除當前工作目錄。如果這樣能夠執行,總覺得有點別扭。但事實上,就行得通了。就算是 python 的規定吧。不過,讓我來確定這個功能的話,還是習慣不能在本地刪除本地。

按照上面的操作,在看當前工作目錄:

>>> os.getcwd() Traceback (most recent call last):File "<stdin>", line 1, in <module> OSError: [Errno 2] No such file or directory

目錄被刪了,當然沒有啦。只能回到父級。

>>> os.chdir(os.pardir) >>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code'

有點不可思議。本來沒有當前工作目錄,怎么會有“父級”的呢?但 Python 就是這樣。

補充一點,前面說的如果目錄不空,就不能用 os.removedirs() 刪除。但是,可以用模塊 shutil 的 retree 方法。

>>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code' >>> os.chdir("rd") >>> now = os.getcwd() >>> now '/home/qw/Documents/VBS/StarterLearningPython/2code/rd' >>> os.listdir(now) ['b.py', 'c.py'] >>> import shutil >>> shutil.rmtree(now) >>> os.getcwd() Traceback (most recent call last):File "<stdin>", line 1, in <module> OSError: [Errno 2] No such file or directory

請讀者注意的是,對于 os.makedirs() 還有這樣的特點:

>>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code' >>> d0 = os.getcwd() >>> d1 = d0+"/ndir1/ndir2/ndir3" #這是想建立的目錄,但是中間的 ndir1,ndir2 也都不存在。 >>> d1 '/home/qw/Documents/VBS/StarterLearningPython/2code/ndir1/ndir2/ndir3' >>> os.makedirs(d1) >>> os.chdir(d1) >>> os.getcwd() '/home/qw/Documents/VBS/StarterLearningPython/2code/ndir1/ndir2/ndir3'

中間不存在的目錄也被建立起來,直到做右邊的目錄為止。與 os.makedirs() 類似的還有 os.mkdir(),不過,os.mkdir() 沒有上面這個功能,它只能一層一層地建目錄。

os.removedirs() 和 os.rmdir() 也類似,區別也類似上面。

文件和目錄屬性

不管是在什么操作系統,都能看到文件或者目錄的有關屬性,那么,在 os 模塊中,也有這樣的一個方法:os.stat()

>>> p = os.getcwd() #當前目錄 >>> p '/home/qw/Documents/VBS/StarterLearningPython'# 這個目錄的有關信息 >>> os.stat(p) posix.stat_result(st_mode=16895, st_ino=4L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=12288L, st_atime=1430224935, st_mtime=1430224935, st_ctime=1430224935)# 指定一個文件 >>> pf = p + "/README.md" # 此文件的信息 >>> os.stat(pf) posix.stat_result(st_mode=33279, st_ino=67L, st_dev=26L, st_nlink=1, st_uid=0, st_gid=0, st_size=50L, st_atime=1429580969, st_mtime=1429580969, st_ctime=1429580969)

從結果中看,可能看不出什么來,先不用著急。這樣的結果是對 computer 姑娘友好的,對讀者可能不友好。如果用下面的方法,就友好多了:

>>> fi = os.stat(pf) >>> mt = fi[8]

fi[8] 就是 st_mtime 的值,它代表最后 modified(修改)文件的時間。看結果:

>>> mt 1429580969

還是不友好。下面就用 time 模塊來友好一下:

>>> import time >>> time.ctime(mt) 'Tue Apr 21 09:49:29 2015'

現在就對讀者友好了。

用 os.stat() 能夠查看文件或者目錄的屬性。如果要修改呢?比如在部署網站的時候,常常要修改目錄或者文件的權限等。這種操作在 Python 的 os 模塊能做到嗎?

要求越來越多了。在一般情況下,不在 Python 里做這個呀。當然,世界是復雜的。肯定有人會用到的,所以 os 模塊提供了 os.chmod()

操作命令

讀者如果使用某種 linux 系統,或者曾經用過 dos(恐怕很少),或者再 windows 里面用過 command,對敲命令都不陌生。通過命令來做事情的確是很酷的。比如,我是在 ubuntu 中,要查看文件和目錄,只需要ls 就足夠了。我并不是否認圖形界面,而是在某些情況下,還是離不開命令的,比如用程序來完成查看文件和目錄的操作。所以,os 模塊中提供了這樣的方法,許可程序員在 Python 程序中使用操作系統的命令。(以下是在 ubuntu 系統,如果讀者是 windows,可以將命令換成 DOS 命令。)

>>> p '/home/qw/Documents/VBS/StarterLearningPython' >>> command = "ls " + p >>> command 'ls /home/qw/Documents/VBS/StarterLearningPython'

為了輸入方便,我采用了前面例子中已經有的那個目錄,并且,用拼接字符串的方式,將要輸入的命令(查看某文件夾下的內容)組裝成一個字符串,賦值給變量 command,然后:

>>> os.system(command) 01.md 101.md 105.md 109.md 113.md 117.md 121.md 125.md 129.md 201.md 205.md 209.md 213.md 217.md 221.md index.md 02.md 102.md 106.md 110.md 114.md 118.md 122.md 126.md 130.md 202.md 206.md 210.md 214.md 218.md 222.md n001.md 03.md 103.md 107.md 111.md 115.md 119.md 123.md 127.md 1code 203.md 207.md 211.md 215.md 219.md 2code README.md 0images 104.md 108.md 112.md 116.md 120.md 124.md 128.md images 204.md 208.md 212.md 216.md 220.md images 0

這樣就列出來了該目錄下的所有內容。

需要注意的是,os.system() 是在當前進程中執行命令,直到它執行結束。如果需要一個新的進程,可以使用 os.exec 或者os.execvp。對此有興趣詳細了解的讀者,可以查看幫助文檔了解。另外,os.system() 是通過 shell 執行命令,執行結束后將控制權返回到原來的進程,但是os.exec() 及相關的函數,則在執行后不將控制權返回到原繼承,從而使 Python 失去控制。

關于 Python 對進程的管理,此處暫不過多介紹。

os.system() 是一個用途不少的函數。曾有一個朋友網上詢問,用它來啟動瀏覽器。不過,這個操作的確要非常仔細。為什么呢?演示一下就明白了。

>>> os.system("/usr/bin/firefox")(process:4002): GLib-CRITICAL **: g_slice_set_config: assertion 'sys_page_size == 0' failed(firefox:4002): GLib-GObject-WARNING **: Attempt to add property GnomeProgram::sm-connect after class was initialised ......

我是在 ubuntu 上操作的,瀏覽器的地址是 /usr/bin/firefox,可是,那個朋友是 windows,他就要非常小心了,因為在 windows 里面,表示路徑的斜杠是跟上面顯示的是反著的,可是在 Python 中\ 這種斜杠代表轉義。解決這個問題可以參看《字符串(1)》的轉義符以及《字符串(2)》的原始字符串講述。比較簡單的一個方法用 r"c:\user\firfox.exe" 的樣式,因為在 r" " 中的,都是被認為原始字符了。還沒完,因為 windows 系統中,一般情況下那個文件不是安裝在我演示的那個簡單樣式的文件夾中,而是C:\Program Files,這中間還有空格,所以還要注意,空格問題。簡直有點暈頭轉向了。讀者按照這些提示,看看能不能完成用 os.system() 啟動 firefox 的操作呢?

凡事感覺麻煩的東西,必然有另外簡單的來替代。于是又有了一個 webbrowser 模塊。可以專門用來打開指定網頁。

>>> import webbrowser >>> webbrowser.open("http://www.itdiffer.com") True

不管是什么操作系統,只要如上操作就能打開網頁了。

總結

以上是生活随笔為你收集整理的python学习笔记(十二)标准库os的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。