文件路径操作

路径操作模块: 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)

目录的组成部分:

  1. nume :目录的最后一部分
  2. name:还等价于 stem+suffix
  3. suffix:目录中最后一个部分的扩展名
  4. stem:目录最后一个部分,没有后缀的部分
  5. suffixes:返回多个扩展名列表
  6. with_suffix(suffix):有扩展名则替换,没有就创建一个
  7. 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

全局方法:

  1. cmd()返回当前工作目录
  2. 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)通配给定的模式,递归目录。都是返回一个生成器

  1. ? 代表匹配一个字符
  2. 、* 代表匹配任意字符
  3. [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.namewindows是返回int,linux返回是posix
os.uname()*nix支持
sys.platfromwindows显示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)
改变文件的属主、属组,但需要足够的权限
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值