如何检查pathlib.Path是否指向同一文件系统位置?
我希望我可以使用.samefile,但是当文件/目录尚不存在时,这不起作用。
简单==似乎也不起作用:Path("test/../file")!=Path("file")
编辑:即使Path("test/../file").resolve().absolute()!=Path("file").resolve().absolute()在一般情况下(例如,当我在网络驱动器上运行它时,前者解析为//networkaddress/file,后者解析为Z:/file
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 吗?
我主要使用 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))
我正在使用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.txt和b.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 则不区分大小写。根据 …
我想用来在当前工作目录中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/')。
我正在尝试根据我的(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,并认为是啊,我应该能够改变PosixPath到Path,我会被罚款.好吧,然后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
x, y, 和z是文件夹d:/
d:/x(当前的)
d:/y
d:/z
什么是得到的路径的最佳方式y,并z从给定的文件夹中x的文件夹路径。
下面是一个小的测试例程,它获取文件的路径并将文件向上移动一个目录。我正在使用 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) 我正在设置一个脚本,我需要使用 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 路径?
发布的答案仅在 Linux 上是正确的。我在 Windows 上仍然有这个问题。我没有找到在 Windows 上通过 PosixPath 的方法。我发现的唯一解决方案是从我的模块中更改内部包,但这不是解决此类问题的安全方法。
提前致谢。
在 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)
这是一种解决方法,但我怀疑我误解了它应该如何工作或做错了。
有人知道发生了什么事吗?