1. os.path模塊
3.4版本之前使用os.path模塊,3.4版本之后建議使用pathlib模塊
方法 | 解釋 |
---|---|
path.join | 拼接一個路徑出來 |
path.exists | 判斷該路徑是否存在 |
path.split | 將路徑切割成頭和尾的一個元組 |
path.abspath | 返回一個絕對路徑 |
path.dirname | 返回‘目錄’ |
path.basename | 返回路徑的最后一部分 |
>>> from os import path
>>> p = path.join('/usr','local/httpd/httpd.conf')
>>> p
'/usr/local/httpd/httpd.conf'
>>> type(p)
<class 'str'>
>>> path.dirname(p)
'/usr/local/httpd'
>>> path.basename(p)
'httpd.conf'
>>> path.split(p)
('/usr/local/httpd', 'httpd.conf')
>>> p
'/etc/local/http/httpd.conf'
>>> while p != path.dirname(p):
... p = path.dirname(p)
... print(p,path.basename(p))
...
/etc/local/http http
/etc/local local
/etc etc
/
2. pathlib模塊
from pathlib import Path
Path中返回的是一個Path對象,而os.path中返回的是一個字符串。
2.1 目錄操作
初始化:
>>> p = Path() # 當前目錄
>>> p = Path('a','b','c/d') # 當前目錄下的a/b/c/d
>>> p = Path('/etc') # 根下的etc目錄
屬性 | 解釋 |
---|---|
parts | 返回路徑中的每一個部分 |
joinpath | 連接多個字符串到Path對象中 |
parent | 目錄的邏輯父目錄 |
parents | 父目錄序列,索引0是直接的父 |
name | 目錄中的最后一部分 |
suffix | 目錄中的最后一部分的擴展名 |
stem | 目錄的最后一個部分,沒有后綴 |
suffixes | 返回多個擴展名列表 |
with_suffix(suffix) | 補充擴展名到路徑的尾部,返回新的路徑,擴展名存在則無效 |
with_name(name) | 替換目錄最后一個部分並返回一個新的路徑 |
>>> p = Path('/usr/local/httpd/httpd.conf')
>>> p.name
'httpd.conf'
>>> p.stem
'httpd'
>>> p.suffix
'.conf'
>>> p.with_name('httpd.txt')
PosixPath('/usr/local/httpd/httpd.txt')
屬性 | 解釋 |
---|---|
cwd() | 返回當前工作目錄 |
home() | 返回當前家目錄 |
is_dir() | 是否是目錄 |
is_file() | 是否是普通文件 |
is_symlink() | 是否是軟鏈接 |
is_socket() | 是否是socket文件 |
is_block_device() | 是否是塊設備 |
is_absolute() | 是否是絕對路徑 |
resolve() | 返回一個新的路徑,該路徑是當前Path的絕對路徑,如果是軟連接則被解析 |
absolute() | 獲取絕對路徑,推薦使用resolve() |
exists() | 目錄或者文件是否存在 |
rmdir() | 刪除空目錄,沒有提供判斷目錄為空的方法 |
touch() | 創建一個文件 |
as_uri() | 將路徑解析成url |
mkdir() | 創建目錄 |
判斷目錄:
>>> Path.cwd()
PosixPath('/home/yanfa')
>>> Path.home()
PosixPath('/home/yanfa')
>>> p = Path('/home/yanfa')
>>> p
PosixPath('/home/yanfa')
>>> p.is_dir()
True
>>> p.is_file()
False
>>> p.is_absolute()
True
創建目錄:
>>> p = Path()
>>> p /= 'a/b/c/d'
>>> p.exists()
False
>>> p.mkdir() # FileNotFoundError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/python3.6/lib/python3.6/pathlib.py", line 1248, in mkdir
self._accessor.mkdir(self, mode)
File "/usr/local/python3.6/lib/python3.6/pathlib.py", line 387, in wrapped
return strfunc(str(pathobj), *args)
FileNotFoundError: [Errno 2] No such file or directory: 'a/b/c/d'
>>> p.mkdir(parents=True)
>>> p.exists()
True
通配符匹配:
- glob(pattern) 匹配給定的模式
- rglob(pattern) 匹配給定的模式,遞歸目錄,返回一個生成器
- match(pattern) 模式匹配,成功返回True
>>> p = Path()
>>> list(p.glob('h*'))
[PosixPath('h'), PosixPath('hello')]
>>> list(p.glob('**/*.py'))
[PosixPath('pass_py.py')]
>>> g = p.rglob('*.py')
>>> next(g)
PosixPath('pass_py.py')
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
>>> p = Path('a/b/c/d')
>>> p = Path('a/b/c/ddd.py')
>>> p.match('d*.py')
True
>>> p.match('c/d*.py')
True
>>> p.match('b/*/d*.py')
True
查看文件或者目錄屬性信息
- stat() 如同linux里面的stat命令
- lstst() 同stat(),但是如果是符號鏈接,就顯示鏈接本身的信息
2.2 文件操作
open(mode='r', buffering=-1, encoding=None, errors=None, newline=None
如何內建的open,返回一個文件對象。- read_bytes() 以'rb'讀取路徑中對應的文件,並返回二進制流。
- read_text() 以'rt'讀取路徑中對應的文件,並返回文本。
- write_bytes(date) 以‘wb’方式寫入數據到路徑對應文件。
- write_text(data) 以‘wt’方式寫入數據到路徑對應的文件。
>>> from pathlib import Path
>>> p = Path('hello')
>>> p.write_text('hello python')
12
>>> p.read_text()
'hello python'
>>> with p.open() as f:
... print(f.read())
...
hello python
3. shutil模塊
3.1 os模塊
- os.name 返回操作系統
- os.uname() 顯示當前操作系統的詳細信息
- sys.platform 返回當前操作系統
- os.listdir() 返回目錄內容的列表
- os.stat() 如何stat
- os.chmod() 修改文件的權限
- os.chown() 改變文件的屬主,屬組
3.2 shutil模塊
shutil模塊提供了對文件的高級操作,特別是針對文件的復制和移動。
- copyfileobj(fsrc, fdst[, length]) 文件對象的復制,復制內容。
- copyfile(src, dst, *, follow_symlinks=True) 復制文件內容,不含元數據
- copymode() 僅僅復制權限
- copystat() 復制元數據,stat包含權限
- copy() 復制文件內容、權限和部分元數據,不包括創建時間和修改時間
- rmtree() 遞歸刪除,同
rm -rf
一樣 - move(src,dst,copy_function=copy2) 遞歸移動文件,目錄到目錄路徑。