$ OS
@ OS 文件/目錄方法
OS 文件/目錄方法 | Linux 命令類比 |
os.getcwd() 返回當前工作目錄 | pwd |
os.chdir(path) 改變當前工作目錄 | cd |
os.listdir(path) 返回path指定的文件夾包含的文件或文件夾的名字的列表 | ls |
os.chmod(path, mode) 更改權限 | chmod |
os.chown(path, uid, gid) 更改文件所有者 | chown |
os.rename(src, dst) 重命名文件或目錄,從 src 到 dst os.renames(old, new) 遞歸地對目錄進行更名,也可以對文件進行更名。 參數 old -- 要重命名的目錄 new --文件或目錄的新名字。甚至可以是包含在目錄中的文件,或者完整的目錄樹 |
mv |
os.mkdir(path[, mode]) 以數字mode的mode創建一個名爲path的文件夾.默認的 mode 是 0777 (八進制)。 os.makedirs(path[, mode]) 遞歸文件夾創建函數。像mkdir(), 但創建的所有intermediate-level文件夾需要包含子文件夾。 |
mkdir |
os.remove(path) 刪除路徑爲path的文件。如果path 是一個文件夾,將拋出OSError; 查看下面的rmdir()刪除一個 directory。 os.removedirs(path) 遞歸刪除目錄。 os.rmdir(path) 刪除path指定的空目錄,如果目錄非空,則拋出一個OSError異常。 如果需要刪除非空目錄, 你可以使用 shutil模塊中的 rmtree函數。 |
rm |
os.readlink(path) 返回軟鏈接所指向的文件 | |
os.open(file, flags[, mode]) 打開一個文件,並且設置需要的打開選項,mode參數是可選的 | |
os.close(fd) 關閉文件描述符 fd | |
os.read(fd, n) 從文件描述符 fd 中讀取最多 n 個字節,返回包含讀取字節的字符串,文件描述符 fd對應文件已達到結尾, 返回一個空字符串。 | |
os.write(fd, str) 寫入字符串到文件描述符 fd中. 返回實際寫入的字符串長度 |
@ os.path模塊 -> 獲取文件的屬性信息
傳送門 -> https://www.runoob.com/python3/python3-os-path.html
os.path.abspath(path) 返回絕對路徑
os.path.basename(path) 返回文件名
os.path.dirname(path) 返回文件路徑
os.path.split(path) 把路徑分割成 dirname 和 basename,返回一個元組
os.path.exists(path) 路徑存在則返回True,路徑損壞返回False
os.path.getmtime(path) 返回最近文件修改時間
os.path.getctime(path) 返回文件 path 創建時間
os.path.getsize(path) 返回文件大小,如果文件不存在就返回錯誤
os.path.isabs(path) 判斷是否爲絕對路徑
os.path.isfile(path) 判斷路徑是否爲文件
os.path.isdir(path) 判斷路徑是否爲目錄
os.path.islink(path) 判斷路徑是否爲鏈接
os.path.ismount(path) 判斷路徑是否爲掛載點
os.path.samefile(path1, path2) 判斷目錄或文件是否相同
os.path.sameopenfile(fp1, fp2) 判斷fp1和fp2是否指向同一文件
[例]注:Windows環境
>>> os.path.basename('C:\\eagle\\Friday.txt')
'Friday.txt'
>>>
>>> os.path.dirname('C:\\eagle\\Friday.txt')
'C:\\eagle'
os.path.splitext(path) 分割路徑,返回路徑名和文件擴展名的元組
>>>
>>> os.path.split('C:\\eagle\\Friday.txt')
('C:\\eagle', 'Friday.txt')
>>>
>>> os.path.splitext('C:\\eagle\\Friday.txt')
('C:\\eagle\\Friday', '.txt')
>>>
>>> os.path.exists('D:\\')
False
>>> os.path.join('opt','sw','readme.txt')
'opt\\sw\\readme.txt'
>>>
$ 錯誤和異常
@ 語法錯誤(解析錯)SyntaxError
@ 異常處理
[例]讓用戶輸入一個合法的整數,但是允許用戶中斷這個程序,用戶中斷的信息會引發一個 KeyboardInterrupt 異常。
>>>while True:
try:
x = int(input("Please enter a number: "))
break
except ValueError:
print("Oops! That was no valid number. Try again ")
except KeyboardInterrupt:
print("You pressed 'Ctrl+C'...Goodbye~")
break #這裏如果不寫break或raise就無限循環了
try語句工作方式;
執行try子句(在關鍵字try和關鍵字except之間的語句)
如果沒有異常發生,忽略except子句,try子句執行後結束。
如果在執行try子句的過程中發生了異常,那麼try子句餘下的部分將被忽略。如果異常的類型和 except 之後的名稱相符,那麼對應的except子句將被執行。最後執行 try 語句之後的代碼。
如果一個異常沒有與任何的except匹配,那麼這個異常將會傳遞給上層的try中。
說明:
1.一個 try 語句可能包含多個except子句,分別來處理不同的特定的異常。最多隻有一個分支會被執行。
2.一個except子句可以同時處理多個異常,這些異常將被放在一個括號裏成爲一個元組,例如:
except (RuntimeError, TypeError, NameError):
pass
3.最後一個except子句可以忽略異常的名稱,它將被當作通配符使用。可以使用這種方法打印一個錯誤信息,然後再次把異常拋出。
try:
...
except <SomeError> as err:
...
except <AnotherError>:
...
except:
print("Unexpected error:")
raise
4.try except 語句還有一個可選的else子句,必須放在所有的except子句之後。
這個子句將在try子句沒有發生任何異常的時候執行。例如:
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print('cannot open', arg)
else:
print(arg, 'has', len(f.readlines()), 'lines')
f.close()
@ 拋出異常 使用raise語句,eg:raise NameError('HiThere')
@ 定義清理行爲
try語句還有另外一個可選的finally子句,它定義了無論在任何情況下都會執行的清理行爲。
[例]
>>> try:
raise KeyboardInterrupt
finally:
print('Goodbye, world!')
Goodbye, world!
Traceback (most recent call last):
File "<pyshell#13>", line 2, in <module>
raise KeyboardInterrupt
KeyboardInterrupt
>>>
如果一個異常在 try 子句裏被拋出,而又沒有任何的 except 把它截住,那麼這個異常會在 finally 子句執行後被拋出。
[例]
>>>def divide(x, y):
try:
result = x / y
except ZeroDivisionError:
print("division by zero!")
else:
print("result is", result)
finally:
print("executing finally clause")
>>> divide(2, 1)
result is 2.0
executing finally clause
>>> divide(2, 0)
division by zero!
executing finally clause
>>> divide("2", "1")
executing finally clause
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "<stdin>", line 3, in divide
TypeError: unsupported operand type(s) for /: 'str' and 'str'
@ 斷言 -> 用於判斷一個表達式,在表達式條件爲 false 的時候觸發異常
assert expression
等價於:
if not expression:
raise AssertionError
assert 後面也可以緊跟參數: assert expression [, arguments]
等價於:
if not expression:
raise AssertionError(arguments)