标签: pathlib

使用远程操作系统分隔符的路径串联

我正在尝试与外部 Linux 服务器一起使用pysftp,但是当我尝试使用os.path.join()或 来连接路径和文件名时pathlib.Path(),可以理解它们默认为本地(Windows)路径分隔符\\'/'.join()可以解决问题,但感觉不是正确的答案,但可能是最好的解决方案。

import os
from pathlib import Path, PosixPath

os.path.join('path', 'to', 'file.txt')
# path\to\file.txt -- Windows

Path('path') / 'to' / 'file.txt'
# path\to\file.txt -- Windows

'/'.join(('path', 'to', 'file.txt'))
# path/to/file.txt -- Posix
Run Code Online (Sandbox Code Playgroud)

通常,我会path/to从当前工作目录中获取pysftp,因此将其输入而不是手动构建整个路径字符串,该'/'.join()方法仍然是唯一有效的方法。

os.path.join('path/to', 'file.txt')
# path/to\file.txt -- Mixed

Path('path/to') / 'file.txt'
# path\to\file.txt -- Windows

'/'.join(('path/to', 'file.txt'))
# path/to/file.txt -- Posix
Run Code Online (Sandbox Code Playgroud)

当我在 Windows 上运行时,有没有办法强制os.path.join()pathlib.Path使用 Posix 分隔符?我尝试设置sep …

python pathlib

2
推荐指数
1
解决办法
1175
查看次数

如何修补pathlib.Path.exists()方法?

我想修补对象的exists()方法pathlib.Path以进行单元测试,但是我无法使它起作用。

我想做的是这样的:

from unittest.mock import patch
from pathlib import Path

def test_move_basic():
    p = Path('~/test.py')
    with patch.object(p, 'exists') as mock_exists:
        mock_exists.return_value = True
Run Code Online (Sandbox Code Playgroud)

但是它失败了:

AttributeError: 'PosixPath' object attribute 'exists' is read-only

有任何想法吗?

python unit-testing mocking pathlib

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

pathlib mkdir 按文件名创建文件夹

我的机器中有以下预先存在的文件夹

D:\scripts\myfolder
Run Code Online (Sandbox Code Playgroud)

我希望我的脚本创建一个名为 的文件夹并在其中logs创建一个文件。log.txt所以路径看起来像

D:\scripts\myfolder\logs\somelog.txt
Run Code Online (Sandbox Code Playgroud)

所以我用了

p = pathlib.Path("D:\scripts\myfolder\logs\somelog.txt")
p.mkdir(parents=True, exisit_ok=True)
Run Code Online (Sandbox Code Playgroud)

现在

print(p.parents[0])==>D:\scripts\myfolder\logs

print(p.parents[1])==>D:\scripts\myfolder

print(p.parents[2])==>D:\scripts

因此,根据Path.mkdir文档 p.mkdir(parents=True, exisit_ok=True)应该创建文件夹logsmyfolder或者scripts等等(如果它们不存在)。

some.txt但它会按inside文件夹的名称创建一个文件夹logs,尽管它不是parents. 为什么会这样?

我知道解决方法是使用pathlib.Path("D:\scripts\myfolder\logs")

python-3.x pathlib

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

如何计算子文件夹中的文件总数

我的文件结构如下所示:

  • 外文件夹
    • 内部文件夹 1
      • 文件...
    • 内部文件夹 2
      • 文件...

我正在尝试计算整个 Outer 文件夹中的文件总数。当我将 os.walk 传递给 Outer 文件夹时,它不会返回任何文件,因为我只有两层,所以我手动编写了它:

total = 0
folders = ([name for name in os.listdir(Outer_folder)
            if os.path.isdir(os.path.join(Outer_folder, name))])
for folder in folders:
    contents = os.listdir(os.path.join(Outer_folder, folder))
    total += len(contents)
print(total)
Run Code Online (Sandbox Code Playgroud)

有更好的方法来做到这一点吗?我可以在任意嵌套的文件夹集中找到文件数吗?我在 stackoverflow 上看不到任何深度嵌套文件夹的示例。

(“更好”我的意思只是某种内置函数,而不是手动编写一些东西来迭代 - 例如一个 os.walk 走整棵树)

python pathlib

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

使用递归文件搜索并排除带有pathlib的startswith()

我想用 pathlib 递归搜索所有文件夹中的所有文件,但我想排除以“.”开头的隐藏系统文件 (如'.DS_Store')但我在pathlib中找不到像startswith这样的函数。如何在pathlib中实现startswith?我知道如何使用 os.

def recursive_file_count(scan_path):
    root_directory = Path(scan_path)
    fcount = len([f for f in root_directory.glob('**/*') if f.startswith(".")])
    print(fcount)
Run Code Online (Sandbox Code Playgroud)

python operating-system for-loop pathlib

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

Python 中未找到路径

我在导入“pathlib”的环境中遇到奇怪的问题,它说在终端中执行以下命令后未定义路径。

>>> import pathlib
>>> Path.cwd()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'Path' is not defined
Run Code Online (Sandbox Code Playgroud)

谢谢

python path pathlib

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

如何检查 PosixPath 是目录还是文件

Path我可以跑步,path.is_dir()我怎样才能做同样的事情PosixPath呢?

python pathlib

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

Python Pathlib路径对象未转换为字符串

我正在尝试使用Shutil使用来自Pathlib的路径对象复制pdf文件,但是当我运行代码时,使用str()将路径转换回字符串时出现错误“ str对象不可调用”。为什么会发生这种情况的任何解释将非常有帮助。谢谢!

from pathlib import Path
from wand.image import Image as wandImage
import shutil
import sys
import os

def pdf2Jpeg(pdf_path):
    pdf = pdf_path
    jpg = pdf[:-3] + "jpg"
    img = wandImage(filename=pdf)
    img.save(filename=jpg)

src0 = Path(r"G:\Well Schematics\Well Histories\Merged")
dst0 = Path(r"G:\Well Schematics\Well Histories\Out")
if not dst0.exists():
    dst0.mkdir()

pdfs = []
api = ''
name = ''
pnum = ''
imgs = []

for pdf in src0.iterdir():
    pdfs.append(pdf)

for pdf in pdfs:

    if not dst0.exists():
        dst0.mkdir()

    str = str(pdf.stem)
    split = str.split('_') …
Run Code Online (Sandbox Code Playgroud)

python shutil pathlib

0
推荐指数
1
解决办法
4702
查看次数

pathlib.Path.cwd() 返回什么?

pathlib.Path.cwd() 返回不同的值,具体取决于我使用的计算机(两台 Windows PC - 一台在工作,一台在家里)。

项目结构(参见https://github.com/jonathanchukinas/file_read_exercise.git

  • 文件读取练习/
    • 垃圾桶/
      • 初始化.py
      • read_excel_file.py
    • 数据/
      • 初始化.y
      • 我的数据.xlsx
    • 初始化.py
    • 主要.py

main.py 和 read_excel_file.py 都包含: from pathlib import Path print(Path.cwd()) 在工作中,每个 python 文件返回顶级目录的绝对路径。在家里,每个 python 文件都会返回其自己目录的绝对路径。

我已经阅读了文档,并且用谷歌搜索并搜索了堆栈溢出,但找不到这个问题的答案:

cwd() 如何工作以便我可以更好地预测其结果?

python directory-structure pathlib

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

有没有办法使用 Pathlib 遍历父文件夹直到名称匹配?

我正在与一位同事讨论是否有一种内置(或干净)的方法来使用 Pathlib 遍历任意路径来查找给定的父文件夹,例如存储库的根目录(每个用户的根目录可能有所不同)所述存储库的本地副本)。我模拟了以下所需的行为:

from pathlib import Path

def find_parent(path: Path, target_parent: str) -> Path:
    for part in path.parts[::-1]:
        if part != target_parent:
            path = path.parent
        else:
            break
    return path

path = Path("/some/arbitrarily/long/path/ROOT_FOLDER/subfolder1/subfolder2/file.py")
root = find_parent(path, "ROOT_FOLDER")
assert root == Path("/some/arbitrarily/long/path/ROOT_FOLDER")
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法来实现这一目标?

python pathlib

0
推荐指数
1
解决办法
541
查看次数

在扩展名之前添加后缀到完整路径名称

我将一些代码从 移至os.pathpathlib.Path发现总的来说它要好得多。

在一项特定任务中,我发现实际上os.path使用起来可能更舒服。我想通过在其名称中添加后缀并保持相同的根和扩展名来从给定路径创建一条新路径。例如,来自:

/a/b/c/file.txt
Run Code Online (Sandbox Code Playgroud)

我想得到:

/a/b/c/file_test.txt
Run Code Online (Sandbox Code Playgroud)

使用os.path,可以通过以下方式轻松完成splitext

/a/b/c/file.txt
Run Code Online (Sandbox Code Playgroud)

但是,浏览了 的pathlib文档,我发现with_namewith_suffix得到了类似的内容:

/a/b/c/file_test.txt
Run Code Online (Sandbox Code Playgroud)

我相信这比版本差得多os.path

有没有更好、更干净的方法来实现这一点pathlib

python path python-3.x pathlib

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