路径操作模块: os.path模块
p = path.join('/etc', 'sysconfig', 'network')#创建目录 拼接一个路径
print(type(p),p)
print(path.dirname(p)) #拿到目录名
print(path.basename(p)) #拿到基名 就是最好一部分
print(path.join(path.dirname(p), path.basename(p))) #将目录名跟基名拼接 拿到全部路径
print(path.normcase('c://Windows')) #全部变成小写 对windows有用
print(path.isdir(p)) #查看是不是目录
print(path.isfile(p)) #查看是不是文件
print(path.split(p)) # 基民跟目录切分
print(path.splitdrive(p)) #切逻辑驱动器 只要windows有
print(path.abspath(p)) # 拿到绝对路径
pathlib模块:建议使用此模块
print(Path('.')) #当前路劲 不写也是当前目录
print(Path()) #同上
print(Path().absolute()) # 当前路径的绝对路劲
print(Path('/etc')) # 这是根下的etc目录 /开头都是在根下的目录
print(Path('a','b','c/d/e.txt')) #创建路劲
p1 = Path('a','s','d')
print(p1 / 'y/x' / 'm') #追加目录再后面 p1这个对象可以重载 / 还可以在前面加
操作符 /
Path对象 / Path对象 # 返回Path对象
Path对象 / 字符串 或者 字符串 / Path对象 # 返回都是Path对象
分解 :parts属性,可以返回路劲的每一个部分
p1 = Path('a','s','d')
print(p1.parts) # 返回('a', 's', 'd')
jojnpath:joinpath(*other)连接多个字符串到Path对象中
p1 = Path('a','s','d')
print(p1.joinpath('etx','inint.d',Path('httped'))) # 返回;a\s\d\etx\inint.d\httped
获取路径:str获取路径字符串的bytes
p = Path('/etc')
print(str(p), bytes(p)) # 返回打印\etc b'\\etc'
父目录:parent目录的逻辑父母录,parents父目录序列,返回是一个可迭代对象,索引0就是父母录
p1 = Path('a','s','d')
# print(p1.parent.parent) # 打印a 拿到
for x in p1.parents: #因为是惰性的 所以遍历拿到
print(x)
目录的组成部分:
- nume :目录的最后一部分
- name:还等价于 stem+suffix
- suffix:目录中最后一个部分的扩展名
- stem:目录最后一个部分,没有后缀的部分
- suffixes:返回多个扩展名列表
- with_suffix(suffix):有扩展名则替换,没有就创建一个
- with_name(name):替换目录最后一个部分返回一个新的路径
p = Path('/magedu/mysqltall/mysql.tar.ge') # 创建目录
print(p.name) # 返回 mysql.tar.ge
print(p.suffix) # 返回 .ge
print(p.suffixes) #返回 ['.tar', '.ge']
print(p.stem) #返回 mysql.tar
print(p.with_name('mtsql.tgz')) #返回 \magedu\mysqltall\mtsql.tgz
print(p.with_suffix('.png')) #返回 \magedu\mysqltall\mysql.tar.png
p = Path('README') #重新创建了p
print(p.with_suffix('.txt')) #返回 README.txt
全局方法:
- cmd()返回当前工作目录
- cmd()返回当前工作目录。
判断方法
is_dir() #判断是否是目录,目录存在返回True
is_file() #判断是否是普通文件
is_symlink() #判断是否是软连接文件
is_socket() #是否是socket文件
is_block_device() #是否是块设备
is_char_device() #是否是字符设备
is_absolute() #是否是绝对路径
exists() #目录或文件是否存在
resolve() #返回一个新的路径,这个新的路径就是当前Path对象的绝对路径,如果是软连接则直接被解析。
absolute() #获取绝对路径
rmdir() #删除空目录,没有提供判断目录为空的方法
touch(mode=0o666,exist_ok=True) #创建一个文件 mode时权限
as_uri() #将路径返回成URL,列如'file:///etc/passwd'
mkdir(mode=0o777,parents=False,exist_ok=False) #创建目录 含有权限
parents #是否创建父目录,为True时就能创建文件不存在的父路径 ;False时,父母录不存在,则抛出FileNotFoundErroe
exist_ok:参数在3.5版本加入,False时,路径存在,则会抛出FileExistsError错误 而把参数改为True时,错误就会忽略 (忽略错误提示的作用)
iterdir() # 返回可迭代对象
通配符:glob(pattern) 通配给定的模式。rglob(pattern)通配给定的模式,递归目录。都是返回一个生成器
- ? 代表匹配一个字符
- 、* 代表匹配任意字符
- [abc]或者[a-z]表示其中一个字符都可以
list(p.glob('test*')) #返回当前目录对象下的test开头的文件
list(p.glob('**/*.py')) #递归所以目录,等同rglob
list(p.glob('**/*')) #递归所有目录
list(p.glob('*.???')) #匹配扩展名为3个字符的文件
list(p.glob('[a-z]*.???')) #匹配a到z其中一个字母开头且扩展名为3个字符的文件
g = p.rglob('*.py') # g拿到的时生成器,迭代器
next(g) # 可以用next()一个一个取
模式匹配:match(pattern)
Path('a/b.py').match('*.py') # True
Path('/a/b/c.py').match('b/*.py') # True
Path('/a/b/c.py').match('a/*.py') # False
Path('/a/b/c.py').match('a/*/*.py') # True
Path('/a/b/c.py').match('a/**/*.py')# True
Path('/a/b/c.py').match('**/*.py') # True
文件操作:Path.open(mode=‘r’, buffering=-1, encoding=None, errors=None, newline=None)。使用方法类似内建函数open。返回一个文件对象
Path.read_bytes()
以'rb'读取路径对应文件,并返回二进制流。
Path.read_text(encoding=None, errors=None)
以'rt'方式读取路径对应文件,返回文本
Path.write_bytes(data) #以'wb'方式写入数据到路径对应文件。
Path.write_text(data, encoding=None, errors=None) #以'wt'方式写入字符串到路径对应文件
p=Path('my_binary_file')
p.write_bytes(b'Binary file contents')
p.read_bytes() # b'Binary file contents'
p=Path('my_text_file')
p.write_text('Text file contents')
p.read_text()# 'Text file contents'
frompathlibimportPathp=Path('o:/test.py')
p.write_text('hello python')
print(p.read_text())
withp.open()asf:
print(f.read(5))
OS模块:
属性或者方法 | 结果 |
---|---|
os.name | windows是返回int,linux返回是posix |
os.uname() | *nix支持 |
sys.platfrom | windows显示win32、linux显示linux |
os.listdir(‘o:/temp’)
- 返回指定目录内容列表,不递归。
- os也有open、read、write等方法,但是太底层,建议使用内建函数open、read、write,使用方式相似。
- $ ln -s test t1建立一个软链接
- os.stat(path, *, dir_fd=None, follow_symlinks=True)
- 本质上调用Linux系统的stat。
- path:路径的string或者bytes,或者fd文件描述符 - - follow_symlinksTrue返回文件本身信息,False且如果是软链接则显示软链接本身。对于软链接本身,可以使用 os.lstat方法。
os.stat('o:/test.txt')
os.stat_result(st_mode=33206, st_ino=281474976710698, st_dev=389224164, st_nlink=1, st_uid=0,st_gid=0, st_size=0, st_atime=1508808249, st_mtime=1508808249,st_ctime=1508808249)
st_mode=33206 => 100666
os.stat('test')
os.stat_result(st_mode=33204, st_ino=3407875, st_dev=64768, st_nlink=1, st_uid=500, st_gid=500,st_size=3, st_atime=1508690220, st_mtime=1508690177, st_ctime=1508690177)
os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)os.chmod('test',0o777)
os.chown(path, uid, gid)
改变文件的属主、属组,但需要足够的权限