将路径附加到路径
Appending a Path to a Path
是否可以附加一个 pathlib.Path
生成器,或者合并两个 Path
生成器?
from pathlib import Path
paths = Path('folder_with_pdfs').glob('**/*.pdf')
paths.append(Path('folder_with_xlss').glob('**/*.xls'))
通过这次尝试,您将获得:
AttributeError: 'generator' object has no attribute 'append'
那是因为 Path.glob
returns 一个 generator
,即当调用 next
时 returns 值的对象完全不知道 append
是。
这里有两个选项,如果您需要一个列表,将路径包装在 list
调用中:
paths = list(Path('folder_with_pdfs').glob('**/*.pdf'))
paths.append(list(Path('folder_with_xlss').glob('**/*.xls')))
(尽管 extend
可能就是您想要的。)
这当然违背了生成器的目的。
所以,我建议使用 chain
之类的东西,并创建一个生成器,将它们组合起来并一次从中产生一个:
from itertools import chain
p1 = Path('folder_with_pdfs').glob('**/*.pdf')
p2 = Path('folder_with_xlss').glob('**/*.xls')
paths = chain(p1, p2)
然后根据需要迭代 paths
,同时减少内存占用。
是否可以附加一个 pathlib.Path
生成器,或者合并两个 Path
生成器?
from pathlib import Path
paths = Path('folder_with_pdfs').glob('**/*.pdf')
paths.append(Path('folder_with_xlss').glob('**/*.xls'))
通过这次尝试,您将获得:
AttributeError: 'generator' object has no attribute 'append'
那是因为 Path.glob
returns 一个 generator
,即当调用 next
时 returns 值的对象完全不知道 append
是。
这里有两个选项,如果您需要一个列表,将路径包装在 list
调用中:
paths = list(Path('folder_with_pdfs').glob('**/*.pdf'))
paths.append(list(Path('folder_with_xlss').glob('**/*.xls')))
(尽管 extend
可能就是您想要的。)
这当然违背了生成器的目的。
所以,我建议使用 chain
之类的东西,并创建一个生成器,将它们组合起来并一次从中产生一个:
from itertools import chain
p1 = Path('folder_with_pdfs').glob('**/*.pdf')
p2 = Path('folder_with_xlss').glob('**/*.xls')
paths = chain(p1, p2)
然后根据需要迭代 paths
,同时减少内存占用。