马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹内)所有的视频格式文件(要求查找mp4, rmvb, avi的格式即可),并把创建一个文件(vedioList.txt)存放所有找到的文件的路径,程序实现如图:
我的代码和小甲鱼的代码跑起来结果都没问题,主要是储存文件创建在哪里的问题,函数里路径的更改能影响上面语句的当前路径吗?
我的代码:
import os
def search_video(start_dir) :
os.chdir(start_dir)
all_files = os.listdir(os.curdir)
for each_file in all_files:
each = os.path.splitext(each_file)
if each[1] in ['.mp4', '.rmvb', '.avi'] :
path = os.getcwd() + os.sep + each_file
f.write(path + '\n')
if os.path.isdir(each_file) :
search_video(each_file)
os.chdir(os.pardir)
start_dir = input('请输入待查找的初始目录:')
f = open('videoList.txt', 'w') # 疑问:不带路径直接打开应该是在python的当前工作目录,为什么执行序发现f是创建在start_dir中?
search_video(start_dir) # 疑问:先打开f,再执行函数,函数更改了当前路径,能影响上一语句吗?
f.close()
小甲鱼代码:
import os
def search_file(start_dir, target) :
os.chdir(start_dir)
for each_file in os.listdir(os.curdir) :
ext = os.path.splitext(each_file)[1]
if ext in target :
vedio_list.append(os.getcwd() + os.sep + each_file + os.linesep) # linesep终止符(换行)
if os.path.isdir(each_file) :
search_file(each_file, target)
os.chdir(os.pardir)
start_dir = input('请输入待查找的初始目录:')
program_dir = os.getcwd() # 当前工作目录,即Python的目录(还没执行函数)
target = ['.mp4', '.avi', '.rmvb']
vedio_list = [] # 可以在函数内被修改,无需用global
search_file(start_dir, target) # 疑问3:此处执行函数改变了当前目录,能否影响上面的program_dir?
# 疑问4:program_dir能否直接用star_dir代替?省略上面的program_dir?
f = open(program_dir + os.sep + 'vedioList.txt', 'w') # 疑问1:program_dir是否多余?直接创建也是在当前目录(即Python的目录)
f.writelines(vedio_list) # 疑问2:执行程序发现f是创建在要查找的初始目录中,这是如何实现的?
f.close()
你的代码的疑问:
疑问:不带路径直接打开应该是在python的当前工作目录,为什么执行序发现f是创建在start_dir中?
只有你的代码在start_dir中才可能这样。
疑问:先打开f,再执行函数,函数更改了当前路径,能影响上一语句吗?
不会影响,文件open的时候就已经创建,之后不会改变路径。
小甲鱼的代码:
疑问1:program_dir是否多余?直接创建也是在当前目录(即Python的目录)
小甲鱼的代码先执行了函数,当前目录已经是start_dir了,此时open不带路径名就会在start_dir下创建文件。
疑问2:执行程序发现f是创建在要查找的初始目录中,这是如何实现的?
你把小甲鱼的代码放在了start_dir下了?
疑问3:此处执行函数改变了当前目录,能否影响上面的program_dir?
代码没有任何地方修改过program_dir,不会改变。
疑问4:program_dir能否直接用star_dir代替?省略上面的program_dir?
在小甲鱼的代码中,如果你希望videoList.txt创建在start_dir下,可以省略或者用star_dir代替。
基于你的问题,你和小甲鱼的代码运行都发现videoList.txt在start_dir下,除了你和小甲鱼的代码都在start_dir下运行以外,还有一种可能就是你在start_dir下看到的videoList.txt不是你运行这两组代码产生的,你最好检查一下文件时间是否是正确,并产看代码目录下是否有videoList.txt。
其实小甲鱼的代码都有不严谨之处,就是运行完毕后,当前目录是start_dir而非program_dir,应该在最后加上os.chdir(program_dir)。你可以在交互界面输入os.getcwd()查看,这个时候你在交互界面如果用open创建没指定路径的文件,是会创建在start_dir下。但是,这个不影响代码的再次运行,因为一运行,当前目录就回到代码所在的目录了,你可以在代码开头加上print(os.getcwd())来验证这一点。
|