OS模塊
- os.path.abspath() :返回path規范化的絕對路徑
import sys import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(BASE_DIR)os.getcwd()
- os.getcwd():直接獲取當前工作文件的目錄,即當前python腳本工作的目錄路徑
print(os.getcwd()) # 結果 F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22
- os.chdir("") : 改變當前腳本工作目錄;相當於shell下cd
特別要注意:
win:路徑全部都是反斜杠的,如:F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22\test1
linux:路徑全部都是斜杠的,如:F:/workspace/OldBoy/源碼\課件與源碼/python全棧3期-課件與源碼/day22源碼/day22課堂代碼/day22/test1
Python中,所有路徑都要采用Linux系統下的路徑格式,用斜杠
os.chdir("test1") # 將當前腳本的工作目錄變更為test1 print(os.getcwd()) #結果,當前腳本的工作目錄就變更到test1下面了 F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22\test1
os.chdir("..") # 返回上一級目錄
print(os.getcwd())
# 結果
# F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼
- os.curdir():返回當前目錄:('.')
print(os.curdir) # 結果 .
- os.pardir() :獲取當前目錄的父目錄字符串名:(’..‘)
print(os.pardir) # 結果 ..
- os.makedirs('dirname1/dirname2'):可生成多層遞歸目錄
os.makedirs("dir1/dir2")

- os.removedirs("dirname1"):若目錄為空,則刪除,並遞歸到上一級目錄,上一級目錄如果也是空的,則刪除,以此類推
os.removedirs("dir1/dir2") # 會將上面創建的兩個文件夾都刪掉 # 如果dir1下面創建任意一個文件,則只刪除dir2
- os.mkdir("dirname"):生成一個目錄;相當於shell中mkdir dirname
os.mkdir("dir3")
- os.rmdir("dirname"):刪除單級空目錄,若目錄不為空則無法刪除,報錯;相當於shell下的rmdir dirname
os.rmdir("dir3")
- os.listdir():列出指定目錄下的所有文件和子目錄,包含隱藏文件,並以列表方式打印
# 指定目錄,就只會列出該目錄下的文件和子目錄 print(os.listdir("dir1")) # 結果 # ['1.py', 'dir2'] # 沒指定目錄,列出的是與當前腳本同級的目錄和文件 print(os.listdir())
- os.remove():刪除一個文件
# 必須指定要刪除的文件的目錄 os.remove("dir1/1.py")
- os.rename("oldname","newname"):重命名文件/目錄
# 把dir1重命名為 dir3 os.rename("dir1","dir3")
- os.stat("path/filename"):獲取文件/目錄信息。
# 看文件 print(os.stat("os_test.py")) # os.stat_result(st_mode=33206, st_ino=281474976734818, st_dev=1143308193, st_nlink=1, st_uid=0, st_gid=0, st_size=556, st_atime=1530249778, st_mtime=1481602274, st_ctime=1530249778) # 看目錄 print(os.stat("test1/test2")) # os.stat_result(st_mode=16895, st_ino=562949953445493, st_dev=1143308193, st_nlink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1530450149, st_mtime=1530450149, st_ctime=1530450149) # 常用的需要看的 st_size=0 # 看文件的大小 st_atime=1530450149 # 用戶最近一次的訪問時間 st_mtime=1530450149 # 用戶最近一次的修改時間 這是經常用的 st_ctime=1530450149 # 看文件的創建時間
- os.sep:輸出操作系統特定的路徑分隔符,win下為"\\", linux 下為 "/"
print(os.sep) # \
- os.linesep:輸出當前平台使用的行終止符,win下為 "\r\n",Linux下為"\n"
print(os.linesep)
- os.pathsep:輸出用於分割文件路徑的字符串 ,win下為; ,Linux 下為 :
print(os.pathsep) # ;
- os.name:輸出字符串指示當前使用平台。 win下為 "nt" ; Linux下為"posix"
print(os.name) # nt
- os.system("bash command") : 運行shell命令,直接顯示
print(os.system("dir"))
- os.environ :獲取系統環境變量
print(os.environ) # 結果 environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\mamingchen\\AppData\\Roaming', 'ASL.LOG': 'Destination=file', 'CLASSPATH': '".;C:\\Program Files\\Java\\jdk1.8.0_171\\lib;C:\\Program Files\\Java\\jdk1.8.0_171\\lib\\tools.jar";', 'COMMONPROGRAMFILES': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files', 'COMPUTERNAME': '5ZVF1G2-2', 'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\mamingchen', 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk1.8.0_171', 'JENKINS_HOME': 'C:\\Users\\mamingchen', 'LOCALAPPDATA': 'C:\\Users\\mamingchen\\AppData\\Local', 'LOGONSERVER': '\\\\DC02-SHQCL', 'NUMBER_OF_PROCESSORS': '4', 'ONEDRIVE': 'C:\\Users\\mamingchen\\OneDrive', 'OS': 'Windows_NT', 'PATH': 'C:\\ProgramData\\Anaconda3;C:\\ProgramData\\Anaconda3\\Library\\mingw-w64\\bin;C:\\ProgramData\\Anaconda3\\Library\\usr\\bin;C:\\ProgramData\\Anaconda3\\Library\\bin;C:\\ProgramData\\Anaconda3\\Scripts;C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\ProgramData\\Oracle\\Java\\javapath;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files\\nodejs\\;E:\\Program Files\\Git\\cmd;C:\\Python\\Python36-32;C:\\Python\\Python36-32\\Scripts;C:\\Python\\Python36-32\\Scripts;C:\\Python\\Python36-32\\;"C:\\Users\\mamingchen\\AppData\\Local\\Microsoft\\WindowsApps;C:\\Program Files (x86)\\Java\\jre1.8.0_151\\bin;C:\\Program Files (x86)\\Java\\jre1.8.0_151\\jre\\bin";E:\\Users\\mamingchen\\AppData\\Local\\Programs\\Fiddler;"C:\\Program Files\\Java\\jdk1.8.0_171\\bin;C:\\Program Files\\Java\\jdk1.8.0_171\\jre\\bin";C:\\Users\\mamingchen\\AppData\\Roaming\\npm', 'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTURE': 'x86', 'PROCESSOR_ARCHITEW6432': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 142 Stepping 9, GenuineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '8e09', 'PROGRAMDATA': 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files (x86)', 'PROGRAMFILES(X86)': 'C:\\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules', 'PUBLIC': 'C:\\Users\\Public', 'PYCHARM_HOSTED': '1', 'PYCHARM_MATPLOTLIB_PORT': '53877', 'PYTHONIOENCODING': 'UTF-8', 'PYTHONPATH': 'C:\\Program Files\\JetBrains\\PyCharm 2018.1.2\\helpers\\pycharm_matplotlib_backend;F:\\workspace\\OldBoy', 'PYTHONUNBUFFERED': '1', 'SESSIONNAME': 'Console', 'SYSTEMDRIVE': 'C:', 'SYSTEMROOT': 'C:\\Windows', 'TEMP': 'C:\\Users\\MAMING~1\\AppData\\Local\\Temp', 'TMP': 'C:\\Users\\MAMING~1\\AppData\\Local\\Temp', 'USERDNSDOMAIN': 'YIXIN.DK', 'USERDOMAIN': 'YIXIN', 'USERDOMAIN_ROAMINGPROFILE': 'YIXIN', 'USERNAME': 'mamingchen', 'USERPROFILE': 'C:\\Users\\mamingchen', 'VBOX_INSTALL_PATH': 'E:\\Program Files\\Oracle\\VirtualBox\\', 'WINDIR': 'C:\\Windows'})
- os.path.split():將path分隔成目錄和文件名二元組返回
print(os.path.split("F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22\os_test.py")) # 結果 ('F:\\workspace\\OldBoy\\源碼\\課件與源碼\\python全棧3期-課件與源碼\\day22源碼\\day22課堂代碼\\day22', 'os_test.py') # 相當於拿的是上面的第一個元素 print(os.path.dirname("F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22\os_test.py")) # F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22 # 相當於拿的是上面的第二個元素 print(os.path.basename("F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22\os_test.py")) # os_test.py
- os.path.dirname():返回path的目錄。其實就是os.path.split(path)的第一個元素 ----常用
- os.path.basename():返回path的目錄。其實就是os.path.split(path)的第二個元素 ----常用
- os.path.exists(path):如果path存在,返回True;如果path不存在,返回False
- os.path.isabs():如果path是絕對路徑,返回True
- os.path.isfile():如果path是要給存在的文件,返回True。否則返回False
- os.path.isdir():如果path是一個存在的目錄,則返回True。否則返回False
- os.path.join(path1[,path2[,path3[....]]]):將多個路徑組合后返回,第一個絕對路徑之前的參數將被忽略-----常用,實現路徑拼接
a = "F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼" b = r"day22\test1\test2" # 要把上面兩個路徑拼接起來 c = os.path.join(a, b) print(c) F:\workspace\OldBoy\源碼\課件與源碼\python全棧3期-課件與源碼\day22源碼\day22課堂代碼\day22\test1\test2
- os.path.getatime():返回path所指向的文件或者目錄的最后存取時間
- os.path.getmtime():返回path所指向的文件或者目錄的最后修改時間
pathlib
# 下面的代碼用來判斷一個文件是目錄還是文件 from pathlib import Path # 判斷文件是目錄 myfile_dir = Path("F:/workspace/TestFanClassCodes/lesson05_生成器迭代器隊列棧_20180728") print(myfile_dir.is_dir()) # 判斷文件是個文件 myfile_file = Path("F:\workspace\TestFanClassCodes\lesson05_生成器迭代器隊列棧_20180728\代碼\generator.py") print(myfile_file.is_file())