标签: pathlib

从 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
查看次数

如何用 pathlib.Path 表示 stdin 和 stderr?

我喜欢这个pathlib.Pathapi,并且经常将它用于快速 cli 工具。尤其是打字机。我有几个紧密相关的问题:

  • 在 UNIX 中,cli 命令-是 stdin 的事实上的标准。Windows下也是这样吗?
  • 是否有一种干净的、跨平台的方式来让pathlib.Path对象(或者实际上是它自动变成的 {POSIX,Windows}Path)来表示 stdin?
  • 那么标准输出呢?

python pathlib

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

python3 -m build 给出 ModuleNotFoundError:没有名为“pathlib2”的模块

我正在尝试构建一个 Python 包,但出现以下错误。

* Creating virtualenv isolated environment...
* Installing packages in isolated environment... (setuptools >= 40.8.0, wheel)
* Getting dependencies for sdist...
Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 351, in <module>
    main()
  File "/usr/local/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 333, in main
    json_out['return_val'] = hook(**hook_input['kwargs'])
  File "/usr/local/lib/python3.10/site-packages/pep517/in_process/_in_process.py", line 285, in get_requires_for_build_sdist
    return hook(config_settings)
  File "/tmp/build-env-eyqolcf7/lib/python3.10/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_sdist
    return self._get_build_requires(config_settings, requirements=[])
  File "/tmp/build-env-eyqolcf7/lib/python3.10/site-packages/setuptools/build_meta.py", line 320, in _get_build_requires
    self.run_setup()
  File "/tmp/build-env-eyqolcf7/lib/python3.10/site-packages/setuptools/build_meta.py", line 482, in run_setup
    super(_BuildMetaLegacyBackend,
  File "/tmp/build-env-eyqolcf7/lib/python3.10/site-packages/setuptools/build_meta.py", line 335, in …
Run Code Online (Sandbox Code Playgroud)

python build pathlib

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

将pathlib用于s3路径

我想构建一些功能来在s3和本地文件系统之间移动文件,但是pathlib似乎吃掉了很多重复的斜杠,从而破坏了我的aws-cli功能:

from pathlib import Path
p = Path('s3://loc')
str(p)
=> 's3:/loc'
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以使用pathlib来处理s3路径?

python python-3.x pathlib

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

如何使用通配符获取路径名字符串并使用pathlib解析glob?

如果我给一个字符串的路径,例如"〜/ pythoncode/*.py",那么将它全局化的最佳方法是什么pathlib

使用pathlib,有一种方法可以使用glob追加到路径:

p = pathlib.Path('~/pythoncode/').expanduser().glob('*.py')
Run Code Online (Sandbox Code Playgroud)

但是,例如,这不起作用,因为用户未展开:

p = pathlib.Path().glob('~/pythoncode/*.py')
Run Code Online (Sandbox Code Playgroud)

这会产生一个异常,因为我没有提供任何参数glob():

p = pathlib.Path('~/pythoncode/*.py').expanduser().glob()
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点pathlib,或者我必须先解析字符串?

python glob python-3.x pathlib

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