求问
import osa=input('请输入待查找的初始目录:')
def find_files(n):
for each_dir in os.listdir(n):
if os.path.isfile(each_dir):
return
elif os.path.isdir(each_dir):
eachdir=each_dir
find_files(eachdir)
if os.path.isdir(a):
for each in os.listdir(a):
if os.path.isdir(each):
find_files(each)
elif os.path.isfile(each):
if os.path.splitext(each)=='.mp4' or os.path.splitext(each)=='.rvmb' or os.path.splitext(each)=='.avi':
file=open('VedoiList.txt','a')
file.write(str(each)+'\n')
else:
print('请输入目录形式') 鱼油的代码存在几个关键问题,下面给出修正方案:
主要问题分析
[*]路径拼接错误:未使用os.path.join导致路径判断失效
[*]递归逻辑错误:遇到第一个文件就return终止遍历
[*]扩展名判断错误:os.path.splitext返回的是元组需取
[*]未处理隐藏目录:直接遍历可能遇到权限问题
修正代码
import os
def find_files(root_dir):
for file_name in os.listdir(root_dir):
full_path = os.path.join(root_dir, file_name)# 关键!拼接完整路径
if os.path.isfile(full_path):
ext = os.path.splitext(file_name).lower()# 取扩展名并转小写
if ext in ('.mp4', '.rmvb', '.avi'):
with open('VideoList.txt', 'a', encoding='utf-8') as f:
f.write(full_path + '\n')
elif os.path.isdir(full_path):
find_files(full_path)# 递归时传递完整路径
if __name__ == '__main__':
target_dir = input('请输入待查找的初始目录:')
if os.path.isdir(target_dir):
find_files(target_dir)
print("查找完成,结果已保存到VideoList.txt")
else:
print("错误:输入的路径不是有效目录")
改进说明
[*]使用os.path.join保证路径正确性
[*]递归时传递完整路径参数
[*]将扩展名转为小写统一判断
[*]使用with open保证文件安全关闭
[*]增加编码参数避免乱码问题
[*]支持.rmvb扩展名(原代码拼写错误.rvmb)
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 本帖最后由 jackz007 于 2025-4-3 11:05 编辑
def find_files(n):
for each_dir in os.listdir(n):
if os.path.isfile(each_dir): # 【错误】:each_dir 无根,os.path.isfile(each_dir) 恒为 False
......
elif os.path.isdir(each_dir): # 【错误】:each_dir 无根,os.path.isdir(each_dir)恒为 False
......
find_files(each_dir) # 【错误】:each_dir 无根,就是一个不存在的子目录
【参考代码】:
import os
def find_files(n):
for each in os . listdir(n) :
x = os . path . join(n , each) # 此句是关键,为 each 加上路径
if os . path . isfile(x) : # 判定 each 是否为文件必须使用其完整路径
ext = os . path . splitext(each) . lower()
if ext in ('.mp4' , '.rmvb' , '.rm' , '.avi' , '.mkv' , '.ts') :
with open('VedoiList.txt','a') as fp :
fp . write(x + '\n')
elif os . path . isdir(x) : # 判定 each 是否为子目录也必须使用其完整路径
find_files(x) # find_files() 的输入参数必须是完整的路径
while True :
a = input('请输入待查找的初始目录 :') . strip()
if a :
if os . path . exists(a) and os . path . isdir(a) :
if os . path . exists('VedoiList.txt') : # 由于按追加方式记录查找结果,为了避免多次记录累加,必须事先删除记录文件
os . remove('VedoiList.txt') # 由于按追加方式记录查找结果,为了避免多次记录累加,必须事先删除记录文件
find_files(a)
break
else :
print('请输入一个目录\n')
else :
break 思考一下
页:
[1]