标签: pathlib

使用 Pathlib 检查两个路径是否指向同一对象,即使目标不存在

如何检查pathlib.Path是否指向同一文件系统位置?

我希望我可以使用.samefile,但是当文件/目录尚不存在时,这不起作用。

简单==似乎也不起作用:Path("test/../file")!=Path("file")

编辑:即使Path("test/../file").resolve().absolute()!=Path("file").resolve().absolute()在一般情况下(例如,当我在网络驱动器上运行它时,前者解析为//networkaddress/file,后者解析为Z:/file

python python-3.x pathlib

5
推荐指数
1
解决办法
874
查看次数

Python pathlib 匹配功能不起作用

pathlibmatch(pattern)被记录为将路径与提供的 glob 样式模式匹配,但它不起作用

>>> Path("w/x/y/z").mkdir(parents=True)
>>> list(Path().glob("w/**/z"))
[PosixPath('w/x/y/z')]
>>> Path("w/x/y/z").match("w/**/z")
False
Run Code Online (Sandbox Code Playgroud)

那不应该返回 true 吗?

python glob pathlib

5
推荐指数
1
解决办法
2541
查看次数

使用pathlib检索最新文件

我主要使用 pathlib 而不是 os 作为路径,但是有一件事我未能在 pathlib 上工作。例如,如果我需要目录中最新创建的 .csv,我将使用 glob & os

import glob
import os

target_dir = glob.glob("/home/foo/bar/baz/*.csv")
latest_csv = max(target_dir, key=os.path.getctime)
Run Code Online (Sandbox Code Playgroud)

有没有仅使用 pathlib 的替代方案?(我知道您可以使用 生成匹配的文件Path.glob(*.csv)

python glob pathlib

5
推荐指数
1
解决办法
1339
查看次数

对于平台无关的应用程序,使 pathlib.glob() 和 pathlib.rglob() 不区分大小写

我正在使用pathlib.glob()pathlib.rglob()分别匹配目录及其子目录中的文件。目标文件都是小写.txt和大写.TXT文件。从文件系统读取相应的文件路径,如下所示:

import pathlib

directory = pathlib.Path()
files_to_create = ['a.txt', 'b.TXT']
suffixes_to_test = ['*.txt', '*.TXT']

for filename in files_to_create:
    filepath = directory / filename
    filepath.touch()
    
for suffix in suffixes_to_test:
    files = [fp.relative_to(directory) for fp in directory.glob(suffix)]
    print(f'{suffix}: {files}')
Run Code Online (Sandbox Code Playgroud)

大部分代码库是在 Windows 10 计算机(运行 Python 3.7.4)上开发的,现在已转移到 macOS Monterey 12.0.1(运行 Python 3.10.1)。

在 Windows 上,两个文件a.txtb.TXT都匹配模式:

*.txt: [WindowsPath('a.txt'), WindowsPath('b.TXT')]
*.TXT: [WindowsPath('a.txt'), WindowsPath('b.TXT')]
Run Code Online (Sandbox Code Playgroud)

相比之下,macOS 只有一个文件与每种模式匹配:

*.txt: [PosixPath('a.txt')]
*.TXT: [PosixPath('b.TXT')]
Run Code Online (Sandbox Code Playgroud)

因此,我假设 macOS 文件系统可能区分大小写,而 Windows 则不区分大小写。根据 …

python cross-platform glob case-sensitive pathlib

5
推荐指数
1
解决办法
4610
查看次数

使用 pathlib 仅获取具有 glob 模式的目录

我想用来在当前工作目录中pathlib.glob()查找具有特定名称模式 ( ) 的目录。*data我不想明确检查 via.isdir()或其他东西。

输入数据

这是相关列表,其中三个文件夹作为预期结果,一个文件具有相同的模式,但它应该是结果的一部分。

ls -ld *data
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2021-02-11_68923_data/
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2021-04-03_38923_data/
drwxr-xr-x 2 user user 4,0K  9. Sep 10:22 2022-01-03_38923_data/
-rw-r--r-- 1 user user    0  9. Sep 10:24 2011-12-43_3423_data
Run Code Online (Sandbox Code Playgroud)

预期结果

[
    '2021-02-11_68923_data/', 
    '2021-04-03_38923_data/',
    '2022-01-03_38923_data/'
]
Run Code Online (Sandbox Code Playgroud)

最小工作示例

from pathlib import Path
cwd = Path.cwd()

result = cwd.glob('*_data/')
result = list(result)
Run Code Online (Sandbox Code Playgroud)

这给了我 3 个文件夹文件。

还尝试了变体cwd.glob('**/*_data/')

python directory glob python-3.x pathlib

5
推荐指数
1
解决办法
4264
查看次数

迭代文件

我正在尝试根据我的(Windows 7)目的调整某人的代码.不幸的是,他特定于UNIX.他是这样的

dir_ = pathlib.PosixPath(str(somePathVariable))
os.chdir(str(dir_))
for pth in dir_:        
    # some operations here
Run Code Online (Sandbox Code Playgroud)

运行这个,我得到了(并不奇怪)

NotImplementedError: cannot instantiate 'PosixPath' on your system
Run Code Online (Sandbox Code Playgroud)

我看着文档pathlib,并认为是啊,我应该能够改变PosixPathPath,我会被罚款.好吧,然后dir_生成一个WindowsPath对象.到现在为止还挺好.但是,我明白了

TypeError: 'WindowsPath' object is not iterable
Run Code Online (Sandbox Code Playgroud)

pathlib版本是1.0,我错过了什么?目的是遍历特定目录中的文件.谷歌搜索第二个错误给出了0次点击.

备注:无法pathlib用作标签,因此我将其放入标题中.

更新

我有Python 2.7.3和pathlib 1.0

python pathlib

4
推荐指数
1
解决办法
7745
查看次数

如何在python中获取兄弟文件夹路径?

x, y, 和z是文件夹d:/

d:/x(当前的)

d:/y

d:/z

什么是得到的路径的最佳方式y,并z从给定的文件夹中x的文件夹路径。

python path python-3.x pathlib

4
推荐指数
2
解决办法
933
查看次数

Python:将文件向上移动一个目录

下面是一个小的测试例程,它获取文件的路径并将文件向上移动一个目录。我正在使用 os 和 shutil 模块,是否有一个模块可以执行此任务?有没有更pythonic的方式来实现这个功能?

下面的代码在 Windows 上运行,但最好的跨平台解决方案将不胜感激。

def up_one_directory(path):
    """Move file in path up one directory"""
    head, tail = os.path.split(path)
    try:
        shutil.move(path, os.path.join(os.path.split(head)[0], tail))
    except Exception as ex:
        # report
        pass
Run Code Online (Sandbox Code Playgroud)

directory shutil python-3.x pathlib

4
推荐指数
2
解决办法
7271
查看次数

我无法加载我的模型,因为我无法放置 PosixPath

我正在设置一个脚本,我需要使用 package.json 中的一些函数fast-ai。事实是,我在 Windows 上,当我定义路径时,fast-ainamed 中的函数load_learner无法加载模型。

我试图将函数更改为包:

state = pickle.load(open(str(path) + '/' + str(fname), 'rb'))

代替:

state = pickle.load(open(path/fname, 'rb'))

但我收到此错误:

 File "lib\site-packages\fastai\basic_train.py", line 462, in load_learner
    state = pickle.load(open(path/fname, 'rb'))
  File "\lib\pathlib.py", line 1006, in __new__
    % (cls.__name__,))
NotImplementedError: cannot instantiate 'PosixPath' on your system
Run Code Online (Sandbox Code Playgroud)

我的路径定义为:

folder_path = './models/model1'
fname = 'model.pkl'
Run Code Online (Sandbox Code Playgroud)

我把这个函数称为: model = load_learner(folder_path, fname)

如何在此功能中使用 Windows 路径?


更新 1

发布的答案仅在 Linux 上是正确的。我在 Windows 上仍然有这个问题。我没有找到在 Windows 上通过 PosixPath 的方法。我发现的唯一解决方案是从我的模块中更改内部包,但这不是解决此类问题的安全方法。


提前致谢。

python pickle pathlib pytorch fast-ai

4
推荐指数
2
解决办法
3066
查看次数

Pathlib 使用“$”“标准化”UNC 路径

在 Python3.8 上,我尝试使用pathlib将字符串连接到远程计算机 C 驱动器上的 UNC 路径。
这是奇怪的不一致。
例如:

>>> remote = Path("\\\\remote\\", "C$\\Some\\Path")
>>> remote
WindowsPath('//remote//C$/Some/Path')

>>> remote2 = Path(remote, "More")
>>> remote2
WindowsPath('/remote/C$/Some/Path/More')
Run Code Online (Sandbox Code Playgroud)

注意首字母//是如何变成的吗/
不过,将初始路径放在一行中,一切都很好:

>>> remote = Path("\\\\remote\\C$\\Some\\Path")
>>> remote
WindowsPath('//remote/C$/Some/Path')

>>> remote2 = Path(remote, "more")
>>> remote2
WindowsPath('//remote/C$/Some/Path/more')
Run Code Online (Sandbox Code Playgroud)

这是一种解决方法,但我怀疑我误解了它应该如何工作或做错了。
有人知道发生了什么事吗?

python pathlib python-3.8

4
推荐指数
1
解决办法
1890
查看次数