假设我正在编写代码pathlib,并且我想迭代目录同一级别中的所有文件。
我可以通过两种方式做到这一点:
p = pathlib.Path('/some/path')
for f in p.iterdir():
print(f)
Run Code Online (Sandbox Code Playgroud)
p = pathlib.Path('/some/path')
for f in p.glob('*'):
print(f)
Run Code Online (Sandbox Code Playgroud)
其中一种选择是否更好?
如果我想指定一个保存文件的路径并创建该路径中不存在的目录,是否可以在一行代码中使用pathlib库来执行此操作?
我想找到两个绝对路径之间的相对路径。我有通常用于pathlib.Path与文件系统交互的现有代码,但我遇到了一个似乎很容易解决os.path.relpath但(到目前为止)很难解决的问题pathlib.Path。
我有:
/home/project/cluster-scope/base/namespaces/acm../../../components/monitoring-rbac/home/project/cluster-scope/base/core/namespaces/acm我想计算从 (C) 到 (B) 的新相对路径。这有效:
>>> import os
>>> path_A = '/home/project/cluster-scope/base/namespaces/acm'
>>> path_B = '../../../components/monitoring-rbac'
>>> path_C = '/home/project/cluster-scope/base/core/namespaces/acm'
>>> path_B_abs = os.path.abspath(os.path.join(path_A, path_B))
>>> os.path.relpath(path_B_abs, path_C)
'../../../../components/monitoring-rbac'
Run Code Online (Sandbox Code Playgroud)
但这并不:
>>> from pathlib import Path
>>> path_A = Path('/home/project/cluster-scope/base/namespaces/acm')
>>> path_B = Path('../../../components/monitoring-rbac')
>>> path_C = Path('/home/project/cluster-scope/base/core/namespaces/acm')
>>> path_B_abs = (path_A / path_B).resolve()
>>> path_B_abs.relative_to(path_C)
Traceback (most recent call last):
File "<stdin>", line …Run Code Online (Sandbox Code Playgroud) 有没有办法删除PathLib模块中的目录及其内容?使用path.unlink()它只删除文件,path.rmdir()目录必须为空.在一个函数调用中没有办法吗?
我正在编写一个 python 脚本,将多个 PDF 合并为一个,然后放入输出文件夹中。每个 PDF 都将位于不同的文件夹中,上面有员工姓名,并且需要与另一个文件夹中相应的 pdf 合并。并非所有员工都会拥有每个文件,因此我将其包含在逻辑中。
我当前遇到的问题是 PdfFileMerger 在附加文件时需要一个字符串,并且 pathlib 库返回一个 windowpath 对象。这不会轻易转换为字符串。我从这篇文章pypdf Merging multiple pdf files into one pdf 中获取有关 PyPDF2 的信息。我是 pathlib 库的新手,我应该进行转换还是应该获取不同的路径对象?
from PyPDF2 import PdfFileMerger, PdfFileReader
from pathlib import Path
tc = Path('totalcomp')
merger = PdfFileMerger()
for i in tc.iterdir():
pdfs = []
try:
pdfs.append(Path(f'profitshare/{i.name}'))
pdfs.append(Path(f'merit/{i.name}'))
finally:
pdfs.append(i)
for pdf in pdfs:
output = i.name
merger.append(pdf, 'rb')
merger.write(Path(f'/output/{i.name}'))
Run Code Online (Sandbox Code Playgroud) 考虑以下几点Path:
import pathlib
path = pathlib.Path(r'C:\users\user1\documents\importantdocuments')
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取确切字符串documents\importantdocuments从Path?
我知道这个例子看起来很傻,这里的真正上下文是将本地文件转换为远程下载链接。
python库pathlib提供Path.relative_to.如果一个路径是另一个路径的子路径,此函数可以正常工作,如下所示:
In [12]: from pathlib import Path
In [13]: foo = Path("C:\\foo")
In [14]: bar = Path("C:\\foo\\bar")
In [15]: bar.relative_to(foo)
Out[15]: WindowsPath('bar')
Run Code Online (Sandbox Code Playgroud)
但是,如果两个路径在同一级别上,relative_to则不起作用.
In [16]: baz = Path("C:\\baz")
In [17]: foo.relative_to(baz)
--------------------------------------------------------------------------
ValueError: 'C:\\foo' does not start with 'C:\\baz'
Run Code Online (Sandbox Code Playgroud)
我希望结果如此
WindowsPath("..\\baz")
Run Code Online (Sandbox Code Playgroud)
该函数os.path.relpath正确执行此操作:
In [18]: import os
In [19]: foo = "C:\\foo"
In [20]: bar = "C:\\bar"
In [21]: os.path.relpath(foo, bar)
Out[21]: '..\\foo'
Run Code Online (Sandbox Code Playgroud)
有没有办法实现的功能os.path.relpath使用pathlib.Path?
使用Python pathlib (文档)功能更改目录的预期方法是什么?
让我们假设我创建一个Path对象如下:
from pathlib import Path
path = Path('/etc')
Run Code Online (Sandbox Code Playgroud)
目前我只知道以下内容,但这似乎破坏了这个想法pathlib.
import os
os.chdir(str(path))
Run Code Online (Sandbox Code Playgroud) redpath = os.path.realpath('.')
thispath = os.path.realpath(redpath)
fspec = glob.glob(redpath+'/*fits')
thispath = os.path.realpath(thispath+'/../../../..')
p = Path(thispath)
userinput = 'n'
while (userinput == 'n'):
text_file = next(p.glob('**/*.fits'))
print("Is this the correct file path?")
print(text_file)
userinput = input("y or n")
parent_dir = text_file.parent.resolve()
fspec = glob.glob(parent_dir+'/*fits')
Run Code Online (Sandbox Code Playgroud)
我收到错误
unsupported operand type(s) for +: 'WindowsPath' and 'str'
Run Code Online (Sandbox Code Playgroud)
我认为这是因为当我需要 glob 一个字符串时,我试图 glob 一个 Windows 文件路径。有没有一种方法可以将 WindowsPath 转换为字符串,以便我可以将所有文件合并到一个列表中?
任何人都可以帮我创建一个函数,它将使用pathlib库创建某个目录下的所有文件的列表吗?
在这里,我有一个:
我有
c:\desktop\test\A\A.txt
c:\desktop\test\B\B_1\B.txt
c:\desktop\test\123.txt
我希望有一个列表可以有上面的路径,但我的代码返回一个嵌套列表.
这是我的代码:
from pathlib import Path
def searching_all_files(directory: Path):
file_list = [] # A list for storing files existing in directories
for x in directory.iterdir():
if x.is_file():
file_list.append(x)
else:
file_list.append(searching_all_files(directory/x))
return file_list
p = Path('C:\\Users\\akrio\\Desktop\\Test')
print(searching_all_files(p))
Run Code Online (Sandbox Code Playgroud)
希望有人能纠正我.
pathlib ×10
python ×9
python-3.x ×2
directory ×1
filepath ×1
filesystems ×1
glob ×1
pdf ×1
python-3.7 ×1