标签: pathlib

干净的方式来获得Path对象的"真正"词干?

预期的投入和产出:

a                 -> a
a.txt             -> a
archive.tar.gz    -> archive
directory/file    -> file
d.x.y.z/f.a.b.c   -> f
logs/date.log.txt -> date # Mine!
Run Code Online (Sandbox Code Playgroud)

这是我对我感到肮脏的实现:

>>> from pathlib import Path
>>> example_path = Path("August 08 2015, 01'37'30.log.txt")
>>> example_path.stem
"August 08 2015, 01'37'30.log"
>>> example_path.suffixes
['.log', '.txt']
>>> suffixes_length = sum(map(len, example_path.suffixes))
>>> true_stem = example_path.name[:-suffixes_length]
>>> true_stem
"August 08 2015, 01'37'30"
Run Code Online (Sandbox Code Playgroud)

因为它在Path没有后缀的情况下中断:

>>> ns_path = Path("no_suffix")
>>> sl = sum(map(len, ns_path.suffixes))
>>> ns_path.name[:-sl]
''
Run Code Online (Sandbox Code Playgroud)

所以我需要先检查Path后缀是否有后缀:

>>> def get_true_stem(path: …
Run Code Online (Sandbox Code Playgroud)

python path pathlib

7
推荐指数
4
解决办法
1849
查看次数

Python3 的 pathlib 可以在 Linux 和 Windows 系统之间移植使用吗?

我正在用 Python3 编写一些软件,旨在备份 Windows 客户端上的目录结构,并将其发送到 Linux 服务器。

我遇到的问题是如何处理 Windows 和 Linux 文件路径。我需要 Windows 客户端创建一个表示源文件的相对路径的对象,将该相对路径发送到服务器,以便服务器知道将文件写入目标文件夹中的哪个子目录,然后发送实际数据。

发送实际数据不是问题,但是如何发送 Windows 相对路径到 Linux 系统?我尝试将其作为字符串使用os.path,但很快就变得一团糟。我正在考虑使用pathlib.

如果我可以创建某种路径对象,我可以使用 pickle 来序列化它,并将其发送到服务器。我将使用 pathlib 中的什么对象来表示路径?

Path()似乎创建了一个适用于当前文件系统(PosixPathWindowsPath)的类的实例,这些文件系统不可移植。如果我WindowsPath在 Windows 客户端上创建一个对象,Linux 将无法反序列化它,因为您甚至无法WindowsPath在 Linux 系统上实例化一个对象。

看起来我可以使用一个PureWindowsPath对象,然后将其发送到 Linux,但是如何将PureWindowsPath对象(表示相对路径)转换为 aPosixPath或至少 a PurePosixPath

那可能吗?还是我想的全错了?

python python-3.x pathlib

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

使用Python pathlib获取不带文件名的文件的绝对路径

我想替换file_location = os.path.abspath(os.path.dirname(__file__))pathlib来获取没有文件名的文件的绝对路径
使用 using directorypath = pathlib.Path(__file__).resolve() 给我绝对路径+文件名
我怎样才能获得没有文件名的绝对路径?

directory path python-3.x pathlib

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

pathlib Path和py.test LocalPath

我已经开始使用了pathlib.Path一段时间,我喜欢使用它.现在我已经习惯了,我已经变得草率,忘记了参与str.

此使用时经常发生tox+ py.test基于临时目录tmpdir(这是一个py._path.local.LocalPath):

from pathlib import Path
import pytest

def test_tmpdir(tmpdir):
    p = Path(tmpdir) / 'testfile.csv'
Run Code Online (Sandbox Code Playgroud)

我不是str()每次都插入,而是更普遍地解决这个问题,但不能.

首先,我尝试使自己的Path类具有适应性_parse_args:

import pytest
from py._path.local import LocalPath
from pathlib import Path, PurePath

def Path(Path):
    @classmethod
    def _parse_args(cls, args):
        parts = []
        for a in args:
            if isinstance(a, PurePath):
                parts += a._parts
            elif isinstance(a, str):
                # Force-cast str subclasses to str (issue #21127)
                parts.append(str(a))
            elif isinstance(a, LocalPath):
                parts.append(str(a))
            else: …
Run Code Online (Sandbox Code Playgroud)

pytest python-3.x pathlib

6
推荐指数
2
解决办法
2043
查看次数

从 pathlib 的 Path 对象获取顶级

我使用pathlib递归匹配所有文件以根据文件内容过滤文件。然后我想找到这个文件的文件夹的顶层是什么。假设如下。我在文件夹中有一个文件:

a/b/c/file.log

我从级别进行搜索a

for f in path_data.glob("**/*"):
    if something inside file f:
         # I would like to get in what folder this file is, i.e. 'b'
Run Code Online (Sandbox Code Playgroud)

我现在可以使用以下方法获得所有父母级别:

  • f.parents 会给我 b/c
  • f.parent 会给我 c
  • f.name 会给我 file.log

但我怎么能得到b呢?

准确地说:存储文件的级别数未知。

UPD:我知道我可以用 split 来做到这一点,但我想知道是否有合适的 API 来做到这一点。我找不到。

python-3.x pathlib

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

Python 3.6 pathlib 路径更改名称父目录

来自 Python 3.4的pathlib 库中的新 Path 包似乎是诸如 等方法的强大替代品os.path.join(),但我在使用它时遇到了一些麻烦。

我有一条路径可以是从folder_foo/file.csv到的任何内容long/path/to/folder_foo/file.csv。我folder_foo用 Pandas读取了 .csv 文件,修改了它并想将它保存到folder_bar/file.csvlong/path/to/folder_bar/file.csv

基本上我想在 Path 对象中重命名folder_foofolder_bar

编辑:示例路径代码

csv_path = Path("long/path/to/folder_foo/file.csv")
Run Code Online (Sandbox Code Playgroud)

尝试

1

csv_path.parents[0] = csv_path.parents[0] + "_clean")
Run Code Online (Sandbox Code Playgroud)

这会导致错误TypeError: unsupported operand type(s) for +: 'PosixPath' and 'str',这意味着您不能+将 aPosixPath与 a结合使用str,如TypeError: unsupported operand type(s) for +: 'PosixPath' 和 'str' 中所述

2

为了解决这个问题,我尝试了以下方法:

csv_path.parents[0] = Path(str(csv_path.parents[0]) + "_clean") …
Run Code Online (Sandbox Code Playgroud)

python-3.x pathlib

6
推荐指数
2
解决办法
5275
查看次数

如何使用win环境变量“pathlib”保存文件?

我正在尝试使用 win 环境变量来%userprofile%\desktop保护pathlib不同用户 PC 中的文件。

但我无法让它工作,它一直保存在运行脚本目录中。

导入路径库
从日期时间导入日期时间

a = r'%userprofile%\desktop\test2' b = 'test' def path(path_name, f_name): date = datetime.now().strftime("%d%m-%H%M%S") file_name = f'{f_name}--{date}.xlsx' file_path = pathlib.Path(path_name).joinpath(file_name) file_dir = pathlib.Path(path_name) try: file_dir.mkdir(parents=True, exist_ok=True) except OSError as err: print(f"Can't create {file_dir}: {err}") return file_path path(a, b)

Run Code Online (Sandbox Code Playgroud)

python windows environment-variables pathlib

6
推荐指数
2
解决办法
7430
查看次数

NotImplementedError:尝试循环目录中的所有 .html 文件时不支持非相对模式

我试图循环遍历目录中的所有 html 文件,但收到此错误:

NotImplementedError: Non-relative patterns are unsupported
Run Code Online (Sandbox Code Playgroud)

我正在使用的代码是:

from bs4 import BeautifulSoup
import argparse
from pathlib import Path

parser = argparse.ArgumentParser(description = ("Script to scrape data from antismash html output"))

parser.add_argument("-p", "--path", help = "give path/to/directory containing antismash outputs", required = True)

args = parser.parse_args()

for file in Path(args.path).glob("/*.html"):
    def scraper(filename):
        soup = BeautifulSoup(open(filename), 'html.parser')
        soup.findAll('a') > os.path.basename(filename).txt
Run Code Online (Sandbox Code Playgroud)

我以前使用过相同的方法,但没有收到错误,所以我不确定发生了什么。

python glob pathlib

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

pathlib 的 `glob` 方法的顺序在运行之间是否一致?

Path('.').glob('*.ext')产生一致的结果排序(假设被通配的文件不会改变)?

似乎全局排序基于文件系统顺序(至少对于旧glob包而言)。是否会通过将文件添加到目录(不会包含在 glob 中)来更改pathlibglob顺序?即使没有向特定目录添加任何内容(例如,当系统上的其他地方进行其他大文件更改时),文件系统是否会更改此顺序?在几天的过程中?或者在所有这些情况下排序会保持一致吗?

只是为了澄清,我不能简单地转换为列表并排序,因为有太多的文件路径无法同时放入内存。我希望每次都能达到相同的顺序,因为我将进行一些 ML 培训,并希望将每个第 n 个文件留作验证数据。此培训将需要几天时间,这就是为什么我很想知道订单在文件系统上是否长时间保持稳定。

python glob pathlib

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

如何使用 python 和 pathlib 将列表元素连接到路径?

假设我有一个未知长度的列表。如何使用 pathlib 将此列表的所有元素加入到我当前的路径中?

from pathlib import Path

Path.joinpath(Path(os.getcwd()).parents[1] , *["preprocessing", "raw data"])
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为该函数需要字符串而不是元组。

python-3.x pathlib

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