标签: pathlib

Python 中的 Pathlib 与 os.path.join

当我需要在脚本中定义文件系统路径时,我用来os.path.join保证该路径在不同文件系统上保持一致:

from os import path
path_1 = path.join("home", "test", "test.txt")
Run Code Online (Sandbox Code Playgroud)

我也知道有一个Pathlib库基本上做同样的事情:

from pathlib import Path
path_2 = Path("home") / "test" / "test.txt"
Run Code Online (Sandbox Code Playgroud)

这两种处理路径的方法有什么区别?哪一个更好?

python path os.path pathlib

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

使用Python中的pathlib复制文件

我尝试复制一个文件 pathlib

import pathlib
import shutil

my_file=pathlib.Path('/etc/hosts')
to_file=pathlib.Path('/tmp/foo')
shutil.copy(my_file, to_file)
Run Code Online (Sandbox Code Playgroud)

我得到这个例外:

/home/foo_egs_d/bin/python /home/foo_egs_d/src/test-pathlib-copy.py
Traceback (most recent call last):
  File "/home/foo_egs_d/src/test-pathlib-copy.py", line 6, in <module>
    shutil.copy(my_file, to_file)
  File "/usr/lib/python2.7/shutil.py", line 117, in copy
    if os.path.isdir(dst):
  File "/home/foo_egs_d/lib/python2.7/genericpath.py", line 41, in isdir
    st = os.stat(s)
TypeError: coercing to Unicode: need string or buffer, PosixPath found

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

...如何在Python 2.7中使用pathlib复制文件?

python copy file python-2.x pathlib

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

获取pathlib时,获取错误:TypeError:invalid file:PosixPath('example.txt')

我正在使用Python 3的pathlib模块,如下所示:

from pathlib import Path

filename = Path(__file__).parent / "example.txt"
contents = open(filename, "r").read()
Run Code Online (Sandbox Code Playgroud)

但我在某些机器上遇到此错误:

TypeError: invalid file: PosixPath('example.txt')
Run Code Online (Sandbox Code Playgroud)

但是在我的机器上它可以工作.

python python-3.x pathlib

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

33
推荐指数
2
解决办法
2万
查看次数

从stat().st_mtime到datetime?

stat()调用检索到的修改时间转换为datetime对象的最惯用/最有效的方法是什么?我想出了以下(python3):

from datetime import datetime, timedelta, timezone
from pathlib import Path

path = Path('foo')
path.touch()
statResult = path.stat()
epoch = datetime(1970, 1, 1, tzinfo=timezone.utc)
modified = epoch + timedelta(seconds=statResult.st_mtime)
print('modified', modified)
Run Code Online (Sandbox Code Playgroud)

似乎围绕一个回合,有点令人惊讶,我必须在那里硬编码Unix时代.有更直接的方式吗?

python datetime stat python-3.x pathlib

33
推荐指数
2
解决办法
3万
查看次数

如何获取pathlib.Path对象的绝对路径?

使用以下pathlib模块创建路径对象:

p = pathlib.Path('file.txt')
Run Code Online (Sandbox Code Playgroud)

p对象将指向文件系统中的某个文件,因为我可以这样做p.read_text().

如何p在字符串中获取对象的绝对路径?

似乎我可以使用例如os.path.abspath(p)获取绝对路径,但使用os.path方法很难,因为我认为pathlib应该替代os.path.

python python-3.x pathlib

32
推荐指数
4
解决办法
3万
查看次数

os.path.join 是否有 Pathlib 替代品?

我目前正在使用Pathlib如下方式访问我的文件的父目录:

Path(__file__).parent
Run Code Online (Sandbox Code Playgroud)

当我打印它时,这给了我以下输出:

print('Parent: ', Path(__file__).parent)
#output
/home/user/EC/main-folder
Run Code Online (Sandbox Code Playgroud)

main-folder有一个.env,我想访问文件和我想加入与父路径.env。现在,我做到了:

dotenv_path = os.path.join(Path(__file__).parent, ".env")
Run Code Online (Sandbox Code Playgroud)

哪个有效。但我想知道,是否有Pathlib替代方案os.path.join()?就像是:

dotenv_path = pathlib_alternate_for_join(Path(__file__).parent, ".env")
Run Code Online (Sandbox Code Playgroud)

python python-3.x pathlib

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

将另一个后缀添加到已具有pathlib后缀的路径中

我正在转换一些旧的Python代码pathlib而不是os.path用于大多数与路径相关的操作,但我最终遇到了以下问题:我需要向已经有扩展的路径添加另一个扩展(而不是替换它).有了os.path,因为我们仅仅处理字符串,该解决方案是与字符串操作添加扩展:

newpath = path + '.res'
Run Code Online (Sandbox Code Playgroud)

它不起作用,pathlib.Path因为它不允许连接任意字符.我能找到的最接近的是:

newpath = path.with_suffix(path.suffix + '.res')
Run Code Online (Sandbox Code Playgroud)

它看起来像一个变通方法,因为它最终仍然使用字符串添加.它有一个新的陷阱,因为我首先忘记了已经有几个扩展并且你想要添加一个新扩展的情况,导致以下代码恢复旧的行为:

newpath = path.with_suffix(''.join(path.suffixes) + '.res')
Run Code Online (Sandbox Code Playgroud)

现在它不会感到简洁和干净,因为它使用越来越多的字符串操作来实现旧行为而不是纯路径操作.Path.suffixes存在的事实意味着库的开发人员考虑了文件可以有多个扩展的情况,但我找不到简单地向路径添加新扩展的方法.我是否有更多惯用的方式来实现相同的行为?

编辑:实际上path.with_suffix(path.suffix + '.res')足以处理已经有几个文件扩展名的情况,即使它对我来说并不是很明显.

python python-3.x pathlib

27
推荐指数
6
解决办法
4266
查看次数

使用pathlib递归遍历所有子目录

如何使用pathlib以递归方式迭代给定目录的所有子目录?

p = Path('docs')
for child in p.iterdir(): child
Run Code Online (Sandbox Code Playgroud)

似乎只是迭代给定目录的直接子节点.

我知道这是可能的os.walk()glob,但我想使用pathlib因为我喜欢使用路径对象.

python python-3.x pathlib

26
推荐指数
6
解决办法
6672
查看次数

使用 pathlib (python 3) 重命名文件扩展名

我正在使用 Windows 10 和 winpython。我有一个扩展名为 .dwt 的文件(它是一个文本文件)。我想将此文件的扩展名更改为 .txt。

我的代码不会抛出任何错误,但不会更改扩展名。

from pathlib import Path

filename = Path("E:\\seaborn_plot\\x.dwt")

print(filename)

filename_replace_ext = filename.with_suffix('.txt')

print(filename_replace_ext)
Run Code Online (Sandbox Code Playgroud)

在winpython的ipython窗口输出中打印出预期的结果(如下图):

E:\seaborn_plot\x.dwt

E:\seaborn_plot\x.txt

但是当我寻找一个扩展名重命名的文件时,扩展名没有改变,只有原始文件存在。我怀疑 Windows 文件权限。

python windows pathlib

25
推荐指数
2
解决办法
3万
查看次数

标签 统计

pathlib ×10

python ×10

python-3.x ×6

copy ×1

datetime ×1

file ×1

filenames ×1

os.path ×1

path ×1

python-2.x ×1

stat ×1

windows ×1