[tools] Pathlib

rename 可以更改文件名 p = Path "data/old name.txt" new p = p.rename "data/new name.txt" 也可以更改folder名字 if base dir/old .exists : base dir/old .rename base dir/new import from pathlib impor

rename

可以更改文件名

p = Path("data/old_name.txt")
new_p = p.rename("data/new_name.txt")

也可以更改folder名字

if (base_dir/old).exists(): (base_dir/old).rename(base_dir/new)

import

from pathlib import Path
from fastcore.xtras import *

ls

fastcore 里添加的功能,可以返回一个L list

Path('data').ls()

expanduser

path里面的‘~’不会自动识别,需要在后面加上expanduser()

Path('~/data').expanduser().ls()

mkdir

用Path定义一个具体的路径,然后mkdir(parents=True,exist_ok=True)

parents=True只在深的路径需要,如果只是一个创建一个深度的子目录(上面的目录都存在)

Path('a').mkdir(exist_ok=True)

如果存在a/b/c/d,除了d以外,需要创建多个目录a/b/c,那么需要parents=True (注意parents是负数)

Path('a/b/c').mkdir(parents=True,exist_ok=True)

exist_ok如果不设置True,如果同目录下有同名的folder,会报错。

path_figname = Path(f'{save_folder}/path_fig/{protein}.png')
path_figname.parent.mkdir(parents=True,exist_ok=True)

设定具体的Path

直接用‘/‘隔开

Path('folder')/f"{fname}.ext"

glob(pattern)

目录下查看

Path('folder').glob("*_summary_confidences.json")

返回generator

rglob(pattern)

目录&它的子目录下查看

Path('folder').rglob("*_summary_confidences.json") #会在folder下的子目录查看

glob和rglob会返回generator,可用[f for f in generator]生成list,或者用for loop查看

files = Path(base_directory).rglob("*_summary_confidences.json")
for f in files: break
print(f)

name

查看文件名(包括extension)

f.name

stem

查看具体文件名称(不包括extension)

f.stem
[f.stem for f in files] #生成有文件名称list