詳談Python3 作業系統與路徑 模組(os / os.path / pathlib)

來源:互聯網
上載者:User
下面為大家分享一篇詳談Python3 作業系統與路徑 模組(os / os.path / pathlib),具有很好的參考價值,希望對大家有所協助。一起過來看看吧

以下代碼以Python3.6.1 / windows10為例

Less is more!

#!/usr/bin/env python# coding=utf-8__author__ = 'Luzhuo'__date__ = '2017/5/7'import osdef os_demo(): # 執行命令 dirs = os.popen("dir").read() print(dirs) # 列印分類樹 dirs_info = os.scandir() for info in dirs_info:  print("檔案名稱: {}, 路徑: {}, inode: {}, 檔案夾? {}, 檔案? {}, 連結? {}".format(info.name, info.path, info.inode(), info.is_dir(), info.is_file(), info.is_symlink()))  stats = info.stat()  print(">>> 訪問時間: {}, 修改時間: {}, 模式修改時間: {}, 大小: {}".format(stats.st_atime, stats.st_ctime, stats.st_mtime, stats.st_size))import signaldef os_func(): ''' 作業系統模組  該模組下的方法,對各個版本的相容不明確,須謹慎使用.  測試版本: Python:3.6.1 Windows:Windows10,64bit ''' # === 系統 === strs = os.name # 當前系統: Linux'posix' / Windows'nt' / 'ce' / 'java' strs = os.sep # 分隔字元 \\ (windows:\\ linux:/) strs = os.pathsep # path變數分隔字元 ; (windows:; linux::) strs = os.linesep # 換行分隔字元 \r\n (windows:/r/n linux:\n) dics = os.environ # 查看系統內容變數(字典) strs = os.getenv("Path", default=-1) # 讀取環境變數, 沒有返回None os.putenv("Path", "C:\\python") # 添加環境變數 (windows無效) os.unsetenv("Path") # 刪除環境變數 (windows不可用) strs = os.getlogin() # 當前登入的使用者名稱 num = os.getpid() # 當前進程PID num = os.system("cmd") # 執行作業系統命令, 返回0/1(0執行正確;1執行錯誤) strs = os.popen("dir").read() # 執行系統命令,並去讀結果 tups = os.times() # 當前進程時間(user使用者 / system系統 / children_user子使用者(windews=0) / children_system子系統(windews=0) / elapsed過去時間) bytes = os.urandom(10) # n位元組用以加密的隨機字元 num = os.cpu_count() # CUP數量 # === 進程 === os.abort() # 結束進程 # execl(file, *args) / execle / execlp / execlpe / execv / execve / execvp / execvpe // 運行新程式替換當前進程 os.execl(r"C:\python", 'python', 'hello.py', 'i') # (windows執行失敗) os._exit(0) # 退出 os.kill(8480, signal.SIGTERM) # (系統) 終止進程(需要匯入:signal) SIGINT (終止進程) / SIGTERM (終止進程) / SIGKILL (終止進程) / SIGALRM (鬧鐘訊號) # === 檔案 / 檔案夾 === strs = os.getcwd() # 當前路徑 bytes = os.getcwdb() # 當前路徑 os.chdir(r"C:\Windows") # 切換路徑 strs = os.curdir # 目前的目錄 . strs = os.pardir # 上級目錄 .. strs = os.sep # 路徑分隔字元 ('/' or '\\') bytes = os.fsencode(r"C:\c.obj") # (編碼) 檔案路徑字串轉為bytes類型 => b'C:\\c.obj' strs = os.fsdecode(b"C:\c.obj") # (解碼) 檔案路徑轉為strs類型 => 'C:\\c.obj' # chmod(path, mode, *, dir_fd=None, follow_symlinks=True) os.chmod(r"C:\python\hello.py", 777) # 修改模式 os.link("file.txt", "file.txt.link") # 建立永久連結 os.symlink("file.txt", "file.txt.link") # 建立軟連結 (windows執行失敗) lists = os.listdir() # 所有檔案和檔案夾(列表) ".""..""D:" # lstat(path, *, dir_fd=None) tups = os.lstat(r"C:\c.obj") # 狀態資訊列表 boolean = os.access(r"C:\c.obj", os.F_OK) # (檔案/檔案夾) 許可權測試 (mode: F_OK存在? / R_OK可讀? / W_OK可寫? / X_OK可執行?) # scandir(path='.') // DirEntry迭代器, 檔案目錄 lists = os.scandir() # st_atime (訪問時間) / st_ctime (修改時間) / st_mtime (模式修改時間) / st_size (大小(位元組bytes)) # st_uid (使用者ID) / st_gid (使用者組ID) # st_ino (inode) / st_mode (模式) / st_dev (裝置) / st_nlink (永久連結) # count = cpu_count() # (系統) CPU線程數(非核心數) tups = os.stat(".") # 擷取狀態資訊, 返回stat_result對象 # utime(path, times=None, *, ns=None, dir_fd=None, follow_symlinks=True) // 更新檔案的訪問和修改時間 num = os.utime(r"C:\c.obj") # walk(top, topdown=True, onerror=None, followlinks=False) // 根目錄(top)遍曆分類樹,返回迭代器 (dirpath, dirnames[], filenames[]). root, dirnames, filenames = os.walk(r"C:\python") os.removedirs(r"c:\python") # 刪除多個檔案夾 (windews刪除多個檔案夾失敗,單個成功) # mkdir(path, mode=0o777, *, dir_fd=None) // 建立單個目錄, 檔案夾已存在,拋 FileExistsError 異常 os.mkdir("test") # makedirs(name, mode=0o777, exist_ok=False) // 建立(多個)檔案夾 os.makedirs(r"./t1/t2/t3") os.rmdir("test") # 刪除單個目錄 # mknod(path, mode=0o600, device=0, *, dir_fd=None) // 建立空檔案 (windows不可用) os.mknod("test.txt") # remove(path, *, dir_fd=None) os.remove("test.txt") # 刪除檔案 # rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None) os.rename("text.txt", "file.txt") # 重新命名 os.renames("text.txt", "file.txt") # replace(src, dst, *, src_dir_fd=None, dst_dir_fd=None) // 重新命名, 存在則替換 os.replace("text.txt", "file.txt") tups = os.stat(r"text.txt") # 檔案屬性 # === 檔案讀寫 === # open(path, flags, mode=0o777, *, dir_fd=None) // 開啟檔案 fd:檔案描述符 fd = os.open(r"C:\c.obj", os.O_RDWR | os.O_CREAT) readfd, writefd = os.pipe() # 開啟管道,返回讀取,寫入 (windows失敗) # fdopen(fd, *args, **kwargs) // 開啟 (windews寫入失敗,讀取""字元) f = os.fdopen(readfd) os.read(fd, 150) # 讀取 os.write(fd, "String".encode("utf-8")) # 寫入 os.fsync(fd) # 強行寫入 os.ftruncate(fd, 100) # 裁剪檔案 bytes = os.lseek(fd, 10, os.SEEK_SET) # 設定指標 SEEK_SET(0開始) SEEK_CUR(1當前位置) SEEK_END(2末尾) fd_temp = os.dup(fd) # 副本 boolean = os.isatty(fd) # 是否是tty裝置 stat = os.fstat(fd) # 狀態資訊 strs = os.device_encoding(fd) # 返回終端字元編碼,非終端None os.close(fd) # 關閉 os.closerange(fd, fd) # 關閉並忽略錯誤 # === DirEntry === for dir in os.scandir():  strs = dir.name # 檔案名稱  strs = dir.path # 完整路徑名  num = dir.inode() # inode編號  boolean = dir.is_dir() # 是否是檔案夾  boolean = dir.is_file() # 是否是檔案  boolean = dir.is_symlink() # 是否是連結  tups = dir.stat() # 狀態資訊的stat_result對象# ======================================================================def path_demo(): path = os.getcwd() # 擷取目前的目錄 print("路徑: {}".format(path)) dirname = os.path.dirname(path) # 擷取檔案夾名 print("檔案夾名為: {}".format(dirname)) drive, path_t = os.path.splitdrive(path) # 擷取盤符 print("盤符為: {}".format(drive))def path_func(): ''' 操作路徑的函數 ''' paths = [r'file.txt', r"/python/lib/hello.py", r"/python/local/text.txt", "C:/python/local", "C:/python/file.txt"] strs = os.path.abspath(paths[0]) # 絕對路徑 strs = os.path.basename(paths[1]) # 檔案名稱 strs = os.path.dirname(paths[1]) # 檔案夾名 strs = os.path.join("C:\\", r"a.txt") # 將路徑組合返回 dirname, filename = os.path.split(paths[1]) # 分割路徑 (目錄 檔案名稱) strs, text = os.path.splitext(paths[1]) # 分離副檔名 (前部分, 副檔名) drivename, pathname = os.path.splitdrive(paths[3]) # 分離目錄 (盤符, 目錄) size = os.path.getsize(paths[0]) # 檔案大小 strs = os.path.normcase(paths[1]) # 規範大小寫 (修改斜杠) strs = os.path.normpath(paths[1]) # 規範斜杠 (修改斜杠) strs = os.path.realpath(paths[1]) # 規範名字 (全名) # relpath(paths[0], start=os.curdir) strs = os.path.relpath(paths[1]) # 當前路徑的檔案相對路徑 => 'lib\\hello.py' boolean = os.path.exists(paths[1]) # 路徑是否存在 boolean = os.path.isabs(paths[1]) # 是否是絕對路徑 (不準) boolean = os.path.isfile(paths[1]) # 是否是檔案 boolean = os.path.isdir(paths[1]) # 是否是檔案夾 boolean = os.path.islink(paths[1]) # 是否是軟連結 boolean = os.path.ismount("C:\\") # 是否是根結點 boolean = os.path.supports_unicode_filenames # Unicode是否可用作檔案名稱 boolean = os.path.samefile(paths[0], paths[0]) # 是否指向同檔案或目錄 boolean = os.path.sameopenfile(os.open(paths[0], 1), os.open(paths[0], 1)) # fd是否指向同一檔案 boolean = os.path.samestat(os.stat(paths[0]), os.stat(paths[0])) # state是否指向同一檔案 time_s = os.path.getatime(paths[0]) # 擷取訪問時間 time_s = os.path.getmtime(paths[0]) # 擷取修改時間 time_s = os.path.getctime(paths[0]) # 中繼資料修改時間# ===================================================================================================import pathlibdef pathlib_demo(): path = pathlib.Path().home() / "python" path_iter = path.iterdir() # 遍曆目錄 for path in path_iter:  file_bool = path.is_file  if not file_bool:   continue  print(">>> {}".format(path))  f = path.open() # 是檔案就開啟讀點內容  data = f.readline()  print(data)  f.close()def pathlib_func(): ''' 適合於不同作業系統的類來對檔案系統路徑進行操作 ''' # === PurePath (純路徑) === # PurePath(*pathsegments) // 系統地靈分割 path_pure = pathlib.PurePath('hello.py') path_pure = pathlib.PurePath('python', 'hello.py') path_pure = pathlib.PurePath(pathlib.Path('python'), pathlib.Path('hello.py')) # PurePosixPath(*pathsegments) // 非windows檔案系統路徑 # PureWindowsPath(*pathsegments) // windows檔案系統路徑 # 路徑是不可變雜湊的, 同風格的路徑是比較有序的 pathlib.PurePosixPath('hello') == pathlib.PurePosixPath('Hello') # => Flase (PurePosixPath分大小寫) pathlib.PureWindowsPath('hello') == pathlib.PureWindowsPath('hello') # => True (PureWindowsPath不分大小寫) pathlib.PureWindowsPath('hello') in {pathlib.PureWindowsPath('Hello')} # => True pathlib.PureWindowsPath('C:') < pathlib.PureWindowsPath('d:') # => True # 不同風格的路徑不能比較有序 pathlib.PureWindowsPath('hello') == pathlib.PurePosixPath('hello') # => False # pathlib.PureWindowsPath('hello') < pathlib.PurePosixPath('hello') # 運算子 path_pure = pathlib.PurePath('c:/') path_pure = path_pure / 'python' / 'hello.py' # 拼接路徑 tups = path_pure.parts # 返回組件元組 => ('c:\\', 'python', 'hello.py') drive = path_pure.drive # 盤符 => 'c:' root = path_pure.root # 根目錄 => '\\' driroot = path_pure.anchor # 盤符 + 根目錄 => 'c:\\' parents = path_pure.parents # 父路徑列表 parents[0] => PureWindowsPath('c:/python') parent = path_pure.parent # 父路徑 => PureWindowsPath('c:/python') name = path_pure.name # 檔案(夾)名 suffix = path_pure.suffix # 副檔名 suffixs = path_pure.suffixes # 副檔名列表 name = path_pure.stem # 不帶尾碼名的檔案(夾)名 => 'hello' path = path_pure.as_posix() # 以/返迴路徑 path = path_pure.as_uri() # 以file URL方式返迴路徑, 必須是絕對路徑 => 'file:///c:/python/hello.py' path = path_pure.joinpath("a.txt", "b.txt") # 拼接路徑 => PureWindowsPath('c:/python/hello.py/a.txt/b.txt') path = path_pure.with_name("world.py") # 更改路徑檔案(夾)名 => PureWindowsPath('c:/python/world.py') path = path_pure.with_suffix(".txt") # 更改副檔名,沒有則添加 boolean = path_pure.match("*.py") # 匹配萬用字元 (從右側進行匹配) (大小寫區分見上方比較代碼) boolean = path_pure.is_absolute() # 是否是絕對路徑 (/ // c:/ 開頭都被認為是絕對路徑) # === Path (具體路徑) === # Path(*pathsegments) path = pathlib.Path('hello.py') # PosixPath(*pathsegments) # WindowsPath(*pathsegments) path_s = path.cwd() # 當前路徑 home = path.home() # 使用者主目錄 state = path.stat() # 該路徑的狀態資訊 同os.stat() state = path.lstat() # 同stat(), 目標是軟連結將返回軟連結資訊 path.chmod(777) # 修改許可權模式 同os.chmod() path.lchmod(777) # 同chmod(), 目標是軟連結將更改軟連結模式 lists = path.glob(r'*.py') # 迭代器, 所有py檔案 (windows失效) group = path.group() # 檔案的組 (windows不可用) iter = path.iterdir() # 遍曆目錄 (必須是目錄) # mkdir(mode=0o777, parents=False, exist_ok=False) path.mkdir() # 建立檔案夾 path.rmdir() # 刪除檔案夾 # open(mode='r', buffering=-1, encoding=None, errors=None, newline=None) // 開啟檔案 f = path.open() bytes = path.read_bytes() # 讀取檔案內容 num = path.write_bytes(b"hello") # (覆蓋)寫入檔案內容 # read_text(encoding=None, errors=None) strs = path.read_text(encoding='utf-8') # write_text(data, encoding=None, errors=None) num = path.write_text("hello") ow = path.owner() # 該檔案擁有者 (windows不可用) path.rename("new.txt") # 重新命名,目標存在則替換 path.replace("new.txt") # 重新命名,目標存在則替換 path_s = path.resolve() # 絕對路徑 path.symlink_to("hello.py", target_is_directory=False) # 建立軟連結, 如果目標是目錄, 則(windows下)target_is_directory=True (windows失敗) path.unlink() # 刪除檔案/檔案軟連結 # touch(mode=0o666, exist_ok=True) path.touch() # 建立檔案 boolean = path.exists() # 檔案(夾)是否存在 boolean = path.is_dir() # 是否是檔案夾 boolean = path.is_file() # 是否是檔案 boolean = path.is_symlink() # 是否是永久連結 boolean = path.is_block_device() # 是否是塊裝置 boolean = path.is_char_device # 是否是字元裝置 boolean = path.samefile(path) # path是否是同一檔案if __name__ == "__main__": os_demo() path_demo() pathlib_demo() # os_func() # path_func() # pathlib_func()



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.