Python中Path对象iterdir()结果的最优截取方法及代码修正
如何截取Path.iterdir()返回的部分目录结果
为什么你的第一段代码报错
你这段代码的问题在于:Dir.iterdir()返回的是一个迭代器,每次循环拿到的paths是单个WindowsPath对象,不是可切片的序列(比如列表)。所以对单个Path对象使用[0:6]切片,自然会触发TypeError: 'WindowsPath' object is not subscriptable错误——这就像你试图对一个单独的文件路径对象做切片,逻辑上就不成立。
用itertools.islice的正确写法
你想用itertools.islice截取迭代器内容的思路是对的,但要注意:islice的第一个参数必须是Dir.iterdir()返回的迭代器,而不是Path对象Dir本身。同时别忘了导入pathlib来创建路径对象。
修正后的代码:
import pathlib import itertools target_dir = pathlib.Path(r'\Windows') # 截取前6个目录项(islice支持简化写法:itertools.islice(迭代器, 终止位置)) for path in itertools.islice(target_dir.iterdir(), 6): print(path)
如何获取一半的目录内容
如果要取目录内容的一半,有两种方式:
- 简单直接(适合目录内容不多的情况):先把迭代器转成列表,再做切片
import pathlib target_dir = pathlib.Path(r'\Windows') all_items = list(target_dir.iterdir()) # 取前一半内容,用整数除法避免小数 half_items = all_items[:len(all_items)//2] for item in half_items: print(item)
- 内存友好(适合目录内容极多的情况):先统计总数,再用islice截取到总数的一半(需要先遍历一次迭代器计数)
import pathlib import itertools target_dir = pathlib.Path(r'\Windows') # 先统计目录项总数 item_count = sum(1 for _ in target_dir.iterdir()) # 截取前一半 half_count = item_count // 2 for path in itertools.islice(target_dir.iterdir(), half_count): print(path)
内容的提问来源于stack exchange,提问作者Charles
相关产品推荐
相关产品推荐

