我正在使用Python的Pathlib,我想采取类似的东西
p = Path('/path/to/foo')
Run Code Online (Sandbox Code Playgroud)
然后尝试几种不同的扩展.我可以
for ext in ['.txt', '.md', '.note']
filename = Path(str(p) + ext)
Run Code Online (Sandbox Code Playgroud)
但这感觉有点尴尬.有一个更好的方法吗?
不仅仅是对问题的回答,我还试图学习如何理解 官方 Python 文档。
我知道Path继承自PurePath,但我无法理解何时使用哪个以及为什么有PurePath&Path而不是一个。
在备选方案列表中,大多数是建议,Path而有些是建议Pathlib。
我在看os.path.dirname()他们建议的地方PurePath.parent。但是当我运行pathlib.PurePath(file).parent.name&时,我得到了相同的结果pathlib.Path(file).parent.name。
那么,为什么他们使用PurePathfor some & Pathfor most。为什么他们不建议Path.parent而不是PurePath.parent?
我正在尝试在目录中创建一个排序的文件列表./pages。这是我到目前为止所拥有的:
import numpy as np
from PIL import Image
import glob
from pathlib import Path
# sorted( l, key=lambda a: int(a.split("-")[1]) )
image_list = []
for filename in Path('./pages').glob('*.jpg'):
# sorted( i, key=lambda a: int(a.split("_")[1]) )
# im=Image.open(filename)
image_list.append(filename)
print(*image_list, sep = "\n")
Run Code Online (Sandbox Code Playgroud)
电流输出:
pages/page_1.jpg
pages/page_10.jpg
pages/page_11.jpg
pages/page_12.jpg
pages/page_2.jpg
pages/page_3.jpg
pages/page_4.jpg
pages/page_5.jpg
pages/page_6.jpg
pages/page_7.jpg
pages/page_8.jpg
pages/page_9.jpg
Run Code Online (Sandbox Code Playgroud)
预期输出:
pages/page_1.jpg
pages/page_2.jpg
pages/page_3.jpg
pages/page_4.jpg
pages/page_5.jpg
pages/page_6.jpg
pages/page_7.jpg
pages/page_8.jpg
pages/page_9.jpg
pages/page_10.jpg
pages/page_11.jpg
pages/page_12.jpg
Run Code Online (Sandbox Code Playgroud)
我已经尝试了重复中找到的解决方案,但它们不起作用,因为 pathlib 文件是类对象,而不是字符串。当我打印它们时,它们仅显示为文件名。
例如:
print(filename) # pages/page_1.jpg
print(type(filename)) …Run Code Online (Sandbox Code Playgroud) 我正在做这样的事情:
import pathlib
p = pathlib.Path("temp/").mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
f.write(result)
Run Code Online (Sandbox Code Playgroud)
错误消息:AttributeError:'NoneType'对象没有属性'open'
显然,基于错误消息,mkdir返回None.
Jean-Francois Fabre提出了这一修正:
p = pathlib.Path("temp/")
p.mkdir(parents=True, exist_ok=True)
with p.open("temp."+fn, "w", encoding ="utf-8") as f:
...
Run Code Online (Sandbox Code Playgroud)
这触发了一条新的错误消息:
文件"/Users/user/anaconda/lib/python3.6/pathlib.py",第1164行,在open opener = self._opener中)
TypeError:需要一个整数(得到类型str)
我正在尝试将目录添加到PATH机智代码中,如下所示:
PROJECT_DIR = Path(__file__).parents[2]
sys.path.append(
PROJECT_DIR / 'apps'
)
Run Code Online (Sandbox Code Playgroud)
它不起作用.如果我打印,sys.path我看到这样的事情:
[..., PosixPath('/opt/project/apps')]
Run Code Online (Sandbox Code Playgroud)
我该如何修复此代码?写作是正常的str(PROJECT_DIR / 'apps')吗?
和
from pathlib import Path
path = Path("/my/path")
for p in path.rglob("*"):
print(p)
Run Code Online (Sandbox Code Playgroud)
我可以获得 中的所有文件和目录/my/path。如何跳过隐藏的文件和目录?
从
file
.hidden_file
dir /
file
.hidden_file
.hidden_dir /
file
.hidden_file
Run Code Online (Sandbox Code Playgroud)
我只想得到
file
dir /
file
Run Code Online (Sandbox Code Playgroud) 我正在努力解决Python 3.6中Pathlib模块的Path.glob()方法的结果.
from pathlib import Path
dir = Path.cwd()
files = dir.glob('*.txt')
print(list(files))
>> [WindowsPath('C:/whatever/file1.txt'), WindowsPath('C:/whatever/file2.txt')]
for file in files:
print(file)
print('Check.')
>>
Run Code Online (Sandbox Code Playgroud)
显然,glob找到了文件,但是没有执行for循环.如何循环pathlib-glob-search的结果?
根据 python 3.6 文档,可以通过以下方式创建目录:
pathlib.Path.mkdir(mode=0o777, parents=False, exist_ok=False)os.mkdir(path, mode=0o777, *, dir_fd=None)os.makedirs(name, mode=0o777, exist_ok=False)问题:
pathlib.Path.mkdir()做了大部分什么os.mkdir()
和os.makedirs()做什么。是pathlib.Path.mkdir()一个“现代”的实施两者的os.mkdir()和os.makedirs()?pathlib.Path.mkdir()vsos.mkdir()或os.makedirs()? 有什么性能差异吗?请解释有关 POSIX 的注意事项。谢谢。
是否有 Pathlib 等价物os.access()?
如果没有 Pathlib,代码将如下所示:
import os
os.access('my_folder', os.R_OK) # check if script has read access to folder
Run Code Online (Sandbox Code Playgroud)
但是,在我的代码中,我正在处理 Pathlib 路径,因此我需要这样做(这只是一个示例):
# Python 3.5+
from pathlib import Path
import os
# get path ~/home/github if on Linux
my_folder_pathlib = Path.home() / "github"
os.access(str(my_folder_pathlib), os.R_OK)
Run Code Online (Sandbox Code Playgroud)
演员str()阵容有点丑。我想知道我想要实现的目标是否有纯 Pathlib 解决方案?
ps 我知道“更容易请求宽恕”的原则,但是这是一个更大框架的一部分,我需要尽快知道脚本是否具有对 NAS 存储文件夹的正确权限。
从历史上看我一直使用以下在读取文件python:
with open("file", "r") as f:
for line in f:
# do thing to line
Run Code Online (Sandbox Code Playgroud)
这仍然是推荐的方法吗?使用以下方法是否有任何缺点:
from pathlib import Path
path = Path("file")
for line in path.open():
# do thing to line
Run Code Online (Sandbox Code Playgroud)
我发现的大多数参考资料都使用with关键字来打开文件,以便不必明确关闭文件。这适用于这里的迭代器方法吗?