Python实现指定目录文件列表功能遇TypeError问题求助
问题解决思路与修正代码
核心错误原因
你碰到的TypeError: listdir() takes at most 1 argument (3 given),是因为os.listdir()仅接受一个参数——目标目录的完整路径,但你最后一行代码给它传了3个参数,完全违背了函数的调用规则。
代码里的其他隐藏问题
- 类型判断逻辑矛盾:把输入转成
int后,又和字符串'360'/'720'比较,类型不匹配导致这两个if分支永远不会执行;而且os.system("cd ...")完全没用,子进程的目录切换不会影响主程序的工作目录。 - 无效调用:构造
folder_path后调用os.listdir(folder_path)却没保存结果,等于白执行。 - 缺少需求中的目录存在性检查逻辑。
修正后的完整代码
import os # 获取并验证设备类型 while True: response = input('SCA Type (360/720): ') try: sca_type = str(int(response)) if sca_type not in ['360', '720']: print('无效的SCA类型,请输入360或720') continue break except ValueError: print('无效的SCA类型,请输入数字') continue # 构造基础目录并检查存在性 base_folder = f'/var/SCAConfigs/SCA{sca_type}/sites/' if not os.path.isdir(base_folder): print(f"错误:目录 {base_folder} 不存在") exit(1) # 获取并验证MAC对应的目录 while True: mac_address = input('MAC: ') target_folder = os.path.join(base_folder, mac_address, 'archive') if os.path.isdir(target_folder): break print(f"错误:目录 {target_folder} 不存在,请检查MAC输入") # 列出目标目录下的文件 file_list = os.listdir(target_folder) print(f"\n{target_folder} 下的文件:") for file in file_list: print(f"- {file}")
关键修正说明
- 修复类型判断:转成字符串后再验证合法类型,避免int与str不匹配的问题。
- 移除无效的
os.system("cd"),直接通过路径拼接定位目标目录。 - 用
os.path.join()拼接路径,避免手动拼接字符串导致的路径格式错误。 - 增加了完整的目录存在性检查,符合你需求中的验证逻辑。
- 正确调用
os.listdir(),仅传入一个合法的目录路径参数。
内容的提问来源于stack exchange,提问作者eatmydictionary3
相关产品推荐
相关产品推荐

