以下代碼以Python3.6.1 / windows10為例
Less is more!
#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/7'
import os
def 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 signal
def 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 pathlib
def 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()
以上這篇詳談Python3 操作系統與路徑 模塊(os / os.path / pathlib)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。