python的路径操作

1.os.path(py3.4之前)

from os import path

p = path.join('/etc','sysconfig','network')  #path.join 拼接。。只能第一个最前位置带/
p
'/etc/sysconfig/network'
print(type(p),p,'\n') #p 是一个字符串
print(path.exists(p)) #判断文件是否存在
print(path.dirname(p)) #路径的dirname
print(path.basename(p))  #路径的基名
print(path.split(p)) #分割dirname 和 basename
print(path.abspath('network'))  #取文件的绝对路径,/jupyter/draft/network 并不存在

<class 'str'> /etc/sysconfig/network 

True
/etc/sysconfig
network
('/etc/sysconfig', 'network')
/jupyter/draft/network

2. pathlib.Path(py3.4之后)

from pathlib import  Path

1.生成一个路径

print('1:',Path()) #取当前路径
print('2:',Path('a','b','c/d')) #字符合成
print('3:',Path('/etc'))  #直接写入绝对路径
1: .
2: a/b/c/d
3: /etc

2. 路径的拼接和分解

/ 拼接:
p / 'str' 或者 'str' / p

p = Path('a','b','f/z')
print(p)
p2 = p / 'new_str'
print(p2)
p3 = '/new_str' / p
print(p3)
p4 = p3 / p
print(p4)
a/b/f/z
a/b/f/z/new_str
/new_str/a/b/f/z
/new_str/a/b/f/z/a/b/f/z

joinpath 拼接

p3.joinpath('etc','ab',Path('http')) # 等效于 p3.joinpath('etc','ab','http')

PosixPath('/new_str/a/b/f/z/etc/ab/http')

路径分割: parts方法

print(p4.parts)

('/', 'new_str', 'a', 'b', 'f', 'z', 'a', 'b', 'f', 'z')

3 获取路径

  1. 获取字符串路径,str
  2. 获取bytes路径,bytes
p = Path('/etc')
print(str(p),'\n',bytes(p))
/etc 
 b'/etc'

获取目录:
获取父目录:
parent
parents

p4 = Path('/new_str/a/b/f/z/a/b/f/z')
print(p4.parent)
print(p4.parents)

for x in p4.parents:
    print(x)
/new_str/a/b/f/z/a/b/f
<PosixPath.parents>
/new_str/a/b/f/z/a/b/f
/new_str/a/b/f/z/a/b
/new_str/a/b/f/z/a
/new_str/a/b/f/z
/new_str/a/b/f
/new_str/a/b
/new_str/a
/new_str
/

其他相关1:

p = Path('/a/b/c/d/g.tar.gz.a')

print(p.name) #取basename
print(p.suffix) #取目录最后一部分的扩展名,最后一个小数点部分。包括小数点。
print(p.suffixes) #取从左到右第一个小数点右侧的部分,小数点分割。每部分都带小数点。
print(p.stem) #取basename 排除最后一个小数点部分
print(p.with_name('233.tgz')) #补仓后缀
print(p.with_suffix('.txt')) #补后缀
g.tar.gz.a
.a
['.tar', '.gz', '.a']
g.tar.gz
/a/b/c/d/233.tgz
/a/b/c/d/g.tar.gz.txt

其他相关2:

p = Path('../tmp/')
print(p.cwd())  #获取当前所在目录
print(p.home())  #获取当前用户的家目录
print(p.is_dir()) #判断是否为目录
print(p.is_file())#判断是否为文件
print(p.is_symlink()) #判断是否为软连接
print(p.is_socket()) #判断是否为socket 文件
print(p.is_block_device()) #判断是否为块设备
print(p.is_char_device()) #判断是否为字符设备
print(p.is_absolute()) #判断是否为绝对路径

print(p.resolve()) #返回绝对路径,推荐使用
print(p.absolute()) #返回绝对路径 
print(p.exists()) #判断文件或者目录是否存在


/jupyter/draft
/root
True
False
False
False
False
False
False
/jupyter/tmp
/jupyter/draft/../tmp
True

其他相关3:

p5 = Path('/b/b/c')
p5.as_uri() #返回文件的uri

#说明:不能使用相对路径。。
'file:///b/b/c'

4. 创建目录或者文件

from pathlib import Path

p6 = Path('../tmp/123')
p6.mkdir(exist_ok = True)

#mkdir(mode=0o777,parents=False,exist_ok = False)
#parents 是否创建父目录,递归创建
#exist_ok = True 忽略文件存在的异常,默认是不忽略。

p7 = Path('../tmp/123/hello.txt')
p7.touch()

#touch(mode=0o666,exist_ok = True)

5. 相关操作

路径相关操作:

#设置路径变量
p1 =Path('/jupyter/tmp/a/b')
p2 =Path('/jupyter/tmp/a/b/3.txt')

# 创建文件
p1.mkdir(parents= True,exist_ok= True)
p2.touch()

# 检测文件是否创建成功
print(p2.exists())

#在a/b下创建新文件
p1 /= 'readme.txt'
p1.touch()
print(p1)
print(p1.exists())


True
/jupyter/tmp/a/b/readme.txt
True

3. 文件操作

p.open(mode='r',buffering=-1,encoding=None,errors=None,newline=None)
返回一个文件对象。

p.read_bytes() 以rb读取路径对应的文件,并返回二进制流;
p.read_text(encoding=None,errors=None) rt
p.write_bytes(data) 以wb 方式写入数据到路径对应的文件
p.write_text(data,encoding=None,errors=None) wt

from pathlib import Path

p = Path('../tmp/test.py')
p.write_text('i am mykernel')
print(p.read_text())

with p.open() as f:
    print(f.read(5))
i am mykernel
i am 

更多欢迎访问:http://www.mykernel.cn/

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容