标签: pathlib

是否有使用Python的Pathlib添加扩展的惯用方法?

我正在使用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 python-3.x pathlib

14
推荐指数
2
解决办法
2086
查看次数

为什么 pathlib 有 PurePath 和 Path?

不仅仅是对问题的回答,我还试图学习如何理解 官方 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

python-3.x pathlib

14
推荐指数
1
解决办法
3489
查看次数

如何在 Python 中自然排序 Pathlib 对象?

我正在尝试在目录中创建一个排序的文件列表./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)

python python-3.x pathlib

13
推荐指数
3
解决办法
1万
查看次数

使用pathlib在python中创建新文件夹并将文件写入其中

我正在做这样的事情:

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)

python-3.x pathlib

12
推荐指数
5
解决办法
2万
查看次数

使用pathlib将目录添加到sys.path

我正在尝试将目录添加到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')吗?

python pathlib

11
推荐指数
2
解决办法
2018
查看次数

跳过 pathlib glob 中的隐藏文件和目录

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 pathlib

11
推荐指数
1
解决办法
6012
查看次数

循环结果来自Path.glob()(Pathlib)

我正在努力解决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 glob pathlib

9
推荐指数
1
解决办法
5694
查看次数

我应该什么时候使用 pathlib.Path.mkdir() 与 os.mkdir() 或 os.makedirs()?

根据 python 3.6 文档,可以通过以下方式创建目录:

  1. pathlib.Path.mkdir(mode=0o777, parents=False, exist_ok=False)
  2. os.mkdir(path, mode=0o777, *, dir_fd=None)
  3. os.makedirs(name, mode=0o777, exist_ok=False)

问题:

  1. 它看起来像pathlib.Path.mkdir()做了大部分什么os.mkdir()os.makedirs()做什么。是pathlib.Path.mkdir()一个“现代”的实施两者的os.mkdir()os.makedirs()
  2. 我什么时候应该使用pathlib.Path.mkdir()vsos.mkdir()os.makedirs()? 有什么性能差异吗?

请解释有关 POSIX 的注意事项。谢谢。

python directory subdirectory pathlib

9
推荐指数
1
解决办法
6660
查看次数

如何使用 Pathlib 检查文件夹/文件权限

是否有 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 python-3.x pathlib

9
推荐指数
1
解决办法
2171
查看次数

使用 pathlib 模块关闭文件的推荐方法?

从历史上看我一直使用以下在读取文件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关键字来打开文件,以便不必明确关闭文件。这适用于这里的迭代器方法吗?

with open() 文档

python with-statement python-3.x pathlib

9
推荐指数
2
解决办法
3079
查看次数