鱼C论坛

 找回密码
 立即注册
查看: 1233|回复: 2

[已解决]不知道程序在哪里出错

[复制链接]
发表于 2021-7-23 11:49:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教群里高手:

题目:编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找mp4 rmvb, avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径

代码如下:

def vediofile_collection(file_path,vedio_set):
    """find all the vedio file is the designated dir\
and collect the path in a text named collection"""

    import os

   
    os.chdir(file_path)

    collection = open('vedio_collection.txt','w')

    all_file = os.listdir(os.curdir)   

    for each_file in all_file:

        if os.path.isfile(each_file):

            (file_name,file_ext) = os.path.splitext(each_file)

            if file_ext in vedio_set:

                collection.write(os.path.join (os.curdir,each_file))

        if os.path.isdir(each_file):

            vediofile_collection(each_file,vedio_set)

            os.chdir(os.pardir)

    collection.close()

    f = open('vedio_collection.txt')

    print(f.read())

    f.close()

file_path = input('请输入要查找的文件夹:')

vedio_set = set(('mp4','rmvb','avi'))

vediofile_collection(file_path,vedio_set)

运行结果是空荡荡的,啥都没有:

请输入要查找的文件夹:D:\\临时文件\\练习本





>>>

最佳答案
2021-7-23 12:45:33


splitext 分隔时后缀会带 . 点,导致你 if 始终不成立。递归过程反复执行 open('vedio_collection.txt','w') 覆盖文件内容,导致文件每次都重新创建

另外导入尽量放函数外,set 函数可以不用,write 写入时加上换行符效果会更好

参考代码:
import os


def vediofile_collection(file_path, vedio_set):
    os.chdir(file_path)

    all_file = os.listdir(os.curdir)

    for each_file in all_file:
        if os.path.isfile(os.curdir + '\\' + each_file):
            (file_name, file_ext) = os.path.splitext(each_file)

            if file_ext[1:] in vedio_set:
                collection.write(os.path.join(os.curdir, each_file) + '\n')

        if os.path.isdir(each_file):
            vediofile_collection(each_file, vedio_set)
            os.chdir(os.pardir)


file_path = input('请输入要查找的文件夹:')

vedio_set = ('mp4', 'rmvb', 'avi')
collection = open('vedioList.txt', 'w')
vediofile_collection(file_path, vedio_set)
collection.close()

print(open('vedioList.txt').read())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-7-23 12:45:33 | 显示全部楼层    本楼为最佳答案   


splitext 分隔时后缀会带 . 点,导致你 if 始终不成立。递归过程反复执行 open('vedio_collection.txt','w') 覆盖文件内容,导致文件每次都重新创建

另外导入尽量放函数外,set 函数可以不用,write 写入时加上换行符效果会更好

参考代码:
import os


def vediofile_collection(file_path, vedio_set):
    os.chdir(file_path)

    all_file = os.listdir(os.curdir)

    for each_file in all_file:
        if os.path.isfile(os.curdir + '\\' + each_file):
            (file_name, file_ext) = os.path.splitext(each_file)

            if file_ext[1:] in vedio_set:
                collection.write(os.path.join(os.curdir, each_file) + '\n')

        if os.path.isdir(each_file):
            vediofile_collection(each_file, vedio_set)
            os.chdir(os.pardir)


file_path = input('请输入要查找的文件夹:')

vedio_set = ('mp4', 'rmvb', 'avi')
collection = open('vedioList.txt', 'w')
vediofile_collection(file_path, vedio_set)
collection.close()

print(open('vedioList.txt').read())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-7-23 15:14:11 | 显示全部楼层
非常感谢指正!

但是我看不懂第10行,为什么要加上 os.curdir + '\\',单独用if os. path. isfile(each_file): 不行吗?有何不同?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-14 02:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表