Pyghon文件操作

3.4之前的版本
from os import path
#os.path 提供大量的函数
p=path.join('/etc','sysconfig','network')
print(p) #/etc/sysconfig/network
print(path.exists(p)) #True 路径是否存在
print(path.split(p)) #('/etc/sysconfig', 'network') 路径切割 head tail
print(path.abspath('.')) #/root 绝对路径
p=path.join('o:/',p,'test.txt')
print(path.dirname(p)) #/etc/sysconfig/network 前边路径
print(path.basename(p)) test.txt 后边文件部分
#获取目录列表
os.listdir("./")
#遍历路径下的文件
3.4之后的版本
# pathlib 提供Path对象来操作 包括目录和文件

from pathlib import Path
p=Path() #对类初始化
print(type(p)) #<class 'pathlib.PosixPath'>
print(p.absolute()) #绝对路径
print(p.joinpath('a', 'b')) #a/b
p=p.joinpath('a', 'b') #a/b
print(p.absolute()) #绝对路径 /root/a/b

p /='c' / 'd'
p=p / 'c' / 'd'
print(p)  #a/b/c/d

p /='e'
print(p) #a/b/c/d/e

p1=Path('etc') #创建绝对路径
print(p1) #etc
print(p1.absolute()) #绝对路径 #/root/etc
p2=Path(' ')

p2=p2 / 'etc' /'syscong' #/etc/syscong 拼接
print(p2)

目录操作
p=path() #当前目录
p3=Path('a','b','c/d')
print(p3) #a/b/c/d
p4=Path('/a/','/b','c')
print(p4) #/b/c

操作符 /
Path对象 / path对象
分解
parts 属性 可以返回路径中每一部分
print(p4.parts) #('/', 'b', 'c')
# joinpath


#获取路径
#str获取路径字符串
#bytes获取路径字符串的bytes

p2=Path('/etc')
print(str(p2),bytes(p2)) #/etc b'/etc'

# 父目录
print(p2.parent)  #/
print(p2.parent.parent)
print(list(p2.parents)) #[PosixPath('/')] 迭代
p2 /='a/b/c/d'
print(p2) #/etc/a/b/c/d
print(list(p2.parents)) #[PosixPath('/etc/a/b/c'), PosixPath('/etc/a/b'), PosixPath('/etc/a'), PosixPath('/etc'), PosixPath('/')]

print(list(p2.parents))[0]
print(next(iter(p2.parents))) #/etc/a/b/c

print(list(p2.absolute().parents)) #[PosixPath('/etc/a/b/c'), PosixPath('/etc/a/b'), PosixPath('/etc/a'), PosixPath('/etc'), PosixPath('/')]
# 处理路径
name  目录的最后一部分
stem  目录最后一部分 没有后缀
suffix 目录中最后一部分扩展名
suffixes 返回多个扩展名列表
with_suffix(suffix)  补充扩展名到路径尾部 返回新的路径 扩展名存在则无效
with_name(name) 替换目录最后一个部分并返回一个新的路径


p5=Path('/etc/sysconfig/network/xx.ifg')
print(p5)
print(p5.name) #xx.ifg
print(p5.stem) # xx
print(p5.suffix) #.ifg
print(p5.suffixes) #['.ifg']
print(p5.with_suffix('.gz'))  #/etc/sysconfig/network/xx.gz
print(p5.with_name('test')) #/etc/sysconfig/network/test

print(p5.parent)
print(p5.parent / 'test')  # /etc/sysconfig/network/test 拼接
print(p5.absolute().joinpath() / 'rrr') #/etc/sysconfig/network/xx.ifg/rrr

# Path方法
for x in p.parents:
     print(x)

cwd() 返回当前工作目录
home() 返回当前家目录

is_dir() 是否是目录
is_file() 是否是普通文件
is_symlink() 是否是软连接
is_socket() 是否是socket文件

is_block_device() 是否是块设备
is_char_device() 是否是字符设备
is_absolute() 是否是绝对路径

print(p5.cwd())  #/root 当前工作路径
print(p5.home())
print(p5.is_dir()) #False
print(p5)
print(p5.is_file())

resolve() 返回一个新路径 这个新路径就是当前Path 对象的绝对路径  如果是软连接则直接被解析
absolute() 也可以获取绝对路径 但是推荐使用resolve()
exists() 目录或文件是否存在
rmdir() 删除空目录 没有提供判断目录是否为空的方法
torch(mode=0o666,exist_ok=True) 创建一个文件
as_uri()将路径返回成URL 例如 file:///etc/passwd

mkdir(mode=0o777,parents=False,exist_ok=False)
print(p5.exists())
p6=Path('/tmp/mysql.tar.gz')

# p6.touch()?
p6.touch()
print(p6.resolve())

print(p6.as_uri()) #file:///tmp/mysql.tar.gz

p7=Path('/tmp/tt.tar')
p7.mkdir()
parents 是否创建父目录 True等同于mkdir -p False时父目录不存在则抛出异常
exist_ok 参数 在3.5版本加入 false时 路径存在 再创建抛出FileExistsError True时 FileExistsError被忽略

iterdir()
# 迭代当前目录
print(Path().iterdir())
#遍历并判断文件类型 如果是目录是否可以判断其是否为空
for x in Path().iterdir():
    if x.is_dir():

         print(x)

迭代文件
for x in p.parents[len(p.parents)-1].iterdir():
     print(x,end='\t')
     if x.is_dir():
         flag=True
         for _ in x.iterdir():
             flag=True
             break
         print('dir','Not Empty' if flag else 'Empty',sep='\t')
     elif x.is_file():
         print('file')
     else:
         print('other file')

print(p6.parents[len(p6.parents)-1])
print(p6.parents)

通配符
* 任意

** 任意级
glob() 通配给定的模式
rglob() 通配给定的模式  递归目录 reko递归

list(p6.glop('test*')) 返回当前目录对象下的test开头的文件
list(p6.glop(**/*.py)) 递归所有目录 等同rglob
list(p.rglop('*.py'))  递归所有目录 找py文件

print(list(Path().glob('t'))) #[]

yanbao_texts = []
for yanbao_file_path in Path(YANBAO_DIR_PATH).glob('*.txt'):
    with open(yanbao_file_path) as f:
        yanbao_texts.append(f.read())
#         if len(yanbao_texts) == 10:
#             break



匹配
match(pattern)
模式匹配 成功返回True

print(Path('a/b.py').match('*.py')) #匹配找py 符不符合*
print(Path('a/b.py').match('a/*.py'))
print(Path('a/b.py').match('c/*.py')) False

文件操作
p4.touch()
p4.open()


os模块
import os
print(os.name)
print(os.listdir('/tmp'))
os.stat()
os.chmod()
os.chown(path,uid,gid)

shutil #shell util
copy复制
copyfileobj(fsrc,fdist[])
import shutil
with open('/tmp/a','r+') as f1:
     f1.write('sdf')
     f1.flush()
     with open('/tmp/b','w+') as f2:
         shutil.copyfileobj(f1,f2)

 copyfile()

 with open() as f1:
     with open() as f2:
         shutil.copyfile()

 csv文件
 json半结构化 html 按照一定的规格
import json
d={"name":"TOm","age":20,"interest":["music","movie"]}
j=json.dumps(d)
print(j)

d1=json.loads(j)
print(d1)
def read_json(file_path):
    with open(file_path, mode='r', encoding='utf8') as f:
        return json.load(f)



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值