Geeker_odd 发表于 2021-7-23 11:49:55

不知道程序在哪里出错

请教群里高手:

题目:编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找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:\\临时文件\\练习本





>>>

Twilight6 发表于 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 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())

Geeker_odd 发表于 2021-7-23 15:14:11

非常感谢指正!

但是我看不懂第10行,为什么要加上 os.curdir + '\\',单独用if os. path. isfile(each_file): 不行吗?有何不同?
页: [1]
查看完整版本: 不知道程序在哪里出错