标签: pathlib

将斜杠末尾添加到pathlib目录的最佳方法是什么?

我有一个目录,我想用斜杠将其打印出来: my_path = pathlib.Path('abc/def')

有没有比这更好的方法os.path.join(str(my_path), '')呢?

python pathlib

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

为什么python pathlib Path('')。exists()返回True?

我期望Path('')这是一条不存在的路径,因为它与文件或目录名称不对应。为什么认为这存在?

from pathlib import Path

print(Path('').exists())
Run Code Online (Sandbox Code Playgroud)

我认为通过将定义Path('')为与相同,可以获得一个好处Path('.')。在什么情况下有优势?

python python-3.x pathlib

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

遇到未经许可的文件夹时,Python Path.rglob 因网络错误而失败

我是 Python 新手,一直在使用这个网站作为参考……谢谢你所做的一切,我学到了很多东西。第一个问题:

我正在使用 Path.rglob() 运行基本的递归文件搜索。当它遇到一个它无权访问的文件夹时,我遇到了错误。我在 Windows 上运行 Python 3.7 并连接到网络驱动器上的 Windows 共享。

这是我的代码:

scan_folder = pathlib.Path("//192.168.1.242/Media")
nfo_files = list(scan_folder.rglob("*.nfo"))
Run Code Online (Sandbox Code Playgroud)

它可以完美运行,直到我遇到一个我无权访问的文件夹,然后它会出错:

Traceback (most recent call last):
  File "D:/Working/media_tools/media_tools/movies_nfo_cataloger.py", line 337, in <module>
    nfo_files = list(scan_folder.rglob("*.nfo"))
  File "C:\Users\ulrick65\Anaconda3\lib\pathlib.py", line 1094, in rglob
    for p in selector.select_from(self):
  File "C:\Users\ulrick65\Anaconda3\lib\pathlib.py", line 544, in _select_from
    for p in successor_select(starting_point, is_dir, exists, scandir):
  File "C:\Users\ulrick65\Anaconda3\lib\pathlib.py", line 507, in _select_from
    entries = list(scandir(parent_path))
OSError: [WinError 59] An unexpected network error occurred: '\\\\192.168.1.242\\Media\\#recycle'

Process finished with exit …
Run Code Online (Sandbox Code Playgroud)

python glob pathlib

5
推荐指数
0
解决办法
898
查看次数

pyinstaller exe 识别相对路径而不是绝对路径

我正在使用 pyinstaller 从脚本创建 EXE。脚本和exe的位置如下:

脚本:root-dir\subdir1\subdir2\src\scriptabc.py

exe:root-dir\subdir1\subdir2\exe\scriptabc.exe

要创建 Exe,我从 Exe 目录运行 cmd 命令。

pyinstaller -F -i ABC.ico "..\src\scriptabc.py" 
Run Code Online (Sandbox Code Playgroud)

生成的文件在 Exe 文件夹中正确创建,可执行文件在 dist 文件夹中。然后我将可执行文件复制到 Exe 文件夹中,使其与 src\scriptabc.py 文件处于相同的深度级别,并参考根目录。

当我运行 exe 时,我使用相对路径的所有代码项,例如

wb_assets = load_workbook(filename = '..//input//01_assets.xlsx')
Run Code Online (Sandbox Code Playgroud)

运行就好。

但是,当代码使用 pathlib 进行绝对路径评估时,它失败并显示以下错误:

File "pathlib.py", line 587, in __getitem__
IndexError: 3
[8920] Failed to execute script scriptabc
Run Code Online (Sandbox Code Playgroud)

我正在使用 pathlib 建立根目录的绝对路径,如下所示:

from pathlib import Path

abspath = Path(__file__).resolve() # resolve to relative path to absolute
rootpath = abspath.parents[3] # root-dir
Run Code Online (Sandbox Code Playgroud)

一旦我建立了根路径,有很多代码会为其他子目录创建路径。

所以这个索引号在使用 src*.py 文件夹时工作正常 为什么它会为位于 exe*.exe …

python windows pyinstaller pathlib

5
推荐指数
0
解决办法
1610
查看次数

模拟/测试对Path.open的调用

我正在尝试为在上调用open方法的函数编写单元测试pathlib.Path。我能够成功地模拟open方法而不会出现问题,但是很难验证函数是否具有正确的行为。请参见下面的示例代码:

def test_my_function(self):
    with patch.object(Path, 'open') as mock_open:
        my_function(*args)  # This function calls Path.open
Run Code Online (Sandbox Code Playgroud)

当我进行内省mock_open和检查_mock_mock_calls列表时,无法找到要写入的文件的字符串路径。通话记录如下:

[
    call(mode='w'),
    call().__enter__(),
    call().__enter__().write('<file contents>'),
    call().__enter__().flush(),
    call().__exit__(None, None, None),
]
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以测试Path.open调用时正在打开的路径?

python mocking pathlib

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

使用pathlib访问网络文件位置

我正在尝试使用Python的pathlib模块测试程序。使用该os模块,您过去只需遵循相同的类似url的形式就可以访问网络驱动器。但是由于某种原因,您不能使用进行此操作pathlib。或者至少我不知道该怎么做。

使用该os模块,所有要做的就是:

path = os.path.join(r'//server-01', 'directory', 'filename.txt')
Run Code Online (Sandbox Code Playgroud)

但是,如果您尝试使用该pathlib模块执行此操作,则可以尝试执行以下操作:

path = Path('//server-01', 'directory', 'filename.txt')
Run Code Online (Sandbox Code Playgroud)

如果我在Windows计算机上,则路径将解析为:

>> WindowsPath('/server-01/directory/filename.txt)
Run Code Online (Sandbox Code Playgroud)

如果我说path.exists()我当然会的False。因为是,/server-01所以不存在,但是//server-01 确实存在。

当然,理想情况下,我希望在运行时得到的结果path.exists()True,如果要显示path,结果将类似于:

>> WindowsPath('//server-01/directory/filename.txt')
Run Code Online (Sandbox Code Playgroud)

更新资料

这有点hacky,但我想它能奏效,无论我想知道正确的方法。

为了到达网络位置,您可以:

os.chdir(join(r'//server-01', 'directory', 'filename.txt'))
path = Path()
path = path.resolve()
Run Code Online (Sandbox Code Playgroud)

结果是这样的:

>> WindowsPath('//server-01/directory/filename.txt')
path.exists()
>> True
Run Code Online (Sandbox Code Playgroud)

如果有人知道更好的方法,请告诉我。

python pathlib

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

如何使用 pathlib 规范化相对路径

我正在尝试在 Python 中使用相对路径,并且我想将我的 csv 文件放在与我的 Python 代码不同的文件夹中。

我的python程序位于以下文件夹中:

G:\projects\code
Run Code Online (Sandbox Code Playgroud)

我想阅读这个上一级的文件:

G:\projects\data\sales.csv
Run Code Online (Sandbox Code Playgroud)

如何使用当前工作文件夹高一级的pathlib指定路径?我不想更改当前的工作文件夹。

我试过这个:

from pathlib import Path
file = Path.cwd() /'..'/'data'/'sales.csv'
Run Code Online (Sandbox Code Playgroud)

但现在“文件”变量等于:

'G:/projects/code/../data/sales.csv'
Run Code Online (Sandbox Code Playgroud)

我通读了文档,要么那里没有解释,要么我只是想念它。

python python-3.x pathlib

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

pathlib追加模式下的路径`write_text`

python pathlib.Path对象write_text()在添加模式下有快捷方式吗?

如果该文件存在,则标准open()函数必须mode="a"打开文件以进行写入和追加,并且Paths .open()函数似乎具有相同的功能(my_path.open("a"))。

但是,便捷的.write_text('..')快捷方式又如何呢?有没有一种方法可以用来pathlib完成打开和追加文件的操作open()呢?

为了清楚起见,我可以

with my_path.open('a') as fp:
    fp.write('my text')
Run Code Online (Sandbox Code Playgroud)

但是还有另一种方法吗?

my_path.write_text('my text', mode='a')

python python-3.x pathlib

5
推荐指数
3
解决办法
463
查看次数

Python pathlib.Path - 如何将独立于平台的文件分隔符作为字符串?

我正在创建一个基于类的不同格式字符串,用于通过通用类方法生成文件名。我正在使用 Python 3.4+ pathlib.Path 模块进行面向对象的文件 I/O。

在构建此字符串时,缺少路径分隔符,我想添加一个独立于平台的文件分隔符,而不仅仅是将 Windows 版本放入。

我搜索了 pathlib 文档,并在这里回答了这个问题,但所有的例子都假设我正在构建一个 Path 对象,而不是一个字符串。pathlib 函数将在任何字符串输出中添加正确的分隔符,但这些是实际路径 - 所以它不会工作。

除了像编写字符串并解析它以找出分隔符是什么这样的hacky之外,有没有办法直接获取当前正确的文件分隔符字符串?

更喜欢使用 pathlib.Path 的答案,而不是 os 或 shutil 包。

代码如下所示:

在构造函数中:

    self.outputdir = Path('drive:\\dir\\file')
    self.indiv_fileformatstr = str(self.outputdir) + '{}_new.m'
Run Code Online (Sandbox Code Playgroud)

在最后使用的方法中:

    indiv_filename = Path(self.indiv_fileformatstr.format(topic))
Run Code Online (Sandbox Code Playgroud)

这遗漏了文件分隔符

python filepath python-3.x pathlib

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

How to get the relative path between two absolute paths in Python using pathlib?

In Python 3, I defined two paths using pathlib, say:

from pathlib import Path

origin = Path('middle-earth/gondor/minas-tirith/castle').resolve()
destination = Path('middle-earth/gondor/osgiliath/tower').resolve()
Run Code Online (Sandbox Code Playgroud)

How can I get the relative path that leads from origin to destination? In this example, I'd like a function that returns ../../osgiliath/tower or something equivalent.

Ideally, I'd have a function relative_path that always satisfies

origin.joinpath(
    relative_path(origin, destination)
).resolve() == destination.resolve()
Run Code Online (Sandbox Code Playgroud)

(well, ideally there would be an operator - such that destination == origin / (destination - origin) …

python python-3.x pathlib

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

标签 统计

pathlib ×10

python ×10

python-3.x ×5

filepath ×1

glob ×1

mocking ×1

pyinstaller ×1

windows ×1