|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Peteryo01223 于 2021-1-26 10:54 编辑
原题目:
编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找mp4 rmvb, avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图(从略):]
看了答案后,我的抄写,及注释,运行成功:
- import os
- def function1(directory, target):
- os.chdir(directory)
- for each in os.listdir(os.curdir):
- suffix = os.path.splitext(each)[1] # 把文件名的后缀,单独提取出来
- if suffix in target: # 如果后缀与要寻找的后缀相同
- video_list.append(os.getcwd() + os.sep + each + os.linesep)
- # 使用os.getcwd(),获得当前的路径,
- # os.sep的用法,能够让代码在不同的平台上都能运行, 使得程序更标准
- # os.linesep字符串,能给出当前平台使用的行终止符
- if os.path.isdir(each): # 判断语句,如果each是一个文件夹,即下一层还有文件或文件夹
- function1(directory, target) # 在本函数中,调用其本身,即递归调用
- os.chdir(os.pardir) # 递归调用后,切记重新返回上一层的母目录
- directory = input('请输入待查找的初始目录:')
- program_dir = os.getcwd()
- target = ['.mp3','.mp4','.avi','.rmvb']
- video_list = []
- function1(directory, target)
- f = open(program_dir + os.sep + 'videoList.txt', 'w') # 在同一个路径上,创建一个新文档 videoList.txt
- f.writelines(video_list) # 用于向文档中写入一序列,即:video_list, 当中的字符串
- f.close() # 随即,关闭文件,也就是保存。否则,在缓存中,可能由于断电而遗失。
复制代码
问题:
1. 第9行,什么目的?我的理解是,本行把前面刚 splitext 拆分的“路径” 和 “文件名”,重新写到一起,放入列表 video_list 中,予以记录。但,为何不用 ‘’ 引号引用,Python 也不报错呢?
2. 第9行,我查到,os.linesep 是给出当前平台使用的行终止符,的意思。我尝试删除 os.linesep,重新 run,发现原来 txt文件中的两个条目,只剩第一条了。请问,这是因为第一条不终止,后面的就不能写上去?如果写不上去,为何 Python 并不报错呢?
谢谢~
本帖最后由 jackz007 于 2021-1-26 11:11 编辑
os.linesep 就是换行符,为列表中的每个字符串添加换行符,就可以用文件的 writelines() 方法,把整个列表的内容一次性写进文件。如果不加这个 os . linesep,写入文件的时候,列表的各个字符串之间就会没有分隔符,所有字符串会粘连在一起,写在同一行中。
|
|