函数无法使用上一个return值
import osimport shutil
def get_all_movies_and_rename(folder, keyword):
"""
删掉文件名前面或者后面多余的字符
:param folder:
:param keyword:
:return:
"""
new_names = []
os.chdir(folder)# 切换到 工作目录
# all_movies 包含文件夹
all_movies = os.listdir(folder)
# print(os.getcwd())
for movie in all_movies:
print(movie)
# 遍历所有文件
try:
if not os.path.isdir(movie):
if keyword in movie:
new_movie_name = movie.replace(keyword, '')
os.rename(movie, new_movie_name)
print("已经将:" + movie + "修改成" + new_movie_name)
else:
pass
except:
pass
print('-----------------------分界线------------------------')
items = os.listdir(folder)
for name in items:
# 将所有的文件夹以及文件名称都大写
name.upper()
new_names.append(name)
print(name)
with open('name_lists.txt', 'a+') as f:# a+
f.write(name + '\n')
return new_names
def move_in_one_dir():
"""
创建一个字典。key:文件夹名称,value:电影名称
:return:
"""
global movie
seires = {}
all_movies = get_all_movies_and_rename('I:\\MP4', 'hhd800.com@')
for movie in all_movies:
prefix = movie.split('-')
if prefix in seires:
seires.append(movie)
else:
seires =
for prefix, file_list in seires.items():# 字典变量模式item()
if len(file_list) > 1:
folder_name = prefix
if not os.path.exists(folder_name):
os.mkdir(folder_name)
for file in file_list:
source = os.path.join(os.getcwd(), file)
destination = os.path.join(folder_name, file)
shutil.move(source, destination)
get_all_movies_and_rename('I:\\MP4', 'hhd800.com@')
move_in_one_dir()
请问下 在move_in_one_dir() 中 引用 get_all_movies_and_rename时 还需要写参数啊 ,
是的,当在一个函数中调用另一个函数时,如果被调用的函数有参数,那么在调用时需要提供相应的参数。在你的代码中,`get_all_movies_and_rename`函数有两个参数,即`folder`和`keyword`,所以在`move_in_one_dir`函数中调用时,需要提供这两个参数。
你可以根据实际需要,在调用`get_all_movies_and_rename`函数时传入对应的参数值。例如:
get_all_movies_and_rename('I:\\MP4', 'hhd800.com@')
这样,`move_in_one_dir`函数就能正常使用`get_all_movies_and_rename`函数的返回值了。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-9 21:46
是的,当在一个函数中调用另一个函数时,如果被调用的函数有参数,那么在调用时需要提供相应的参数。在你的 ...
有办法优化我的代码吗 slhlde 发表于 2024-04-09 21:48
有办法优化我的代码吗
当然可以优化代码!以下是一种可能的优化方案:
import os
import shutil
def get_all_movies_and_rename(folder, keyword):
"""
删除文件名中的多余字符并重命名文件
:param folder: 文件夹路径
:param keyword: 要删除的关键字
:return: 文件列表
"""
os.chdir(folder)# 切换到目标文件夹
all_movies = os.listdir(folder)# 获取文件夹中的所有文件
new_names = []
for movie in all_movies:
if os.path.isfile(movie) and keyword in movie:
new_movie_name = movie.replace(keyword, '')# 替换掉关键字
os.rename(movie, new_movie_name)# 重命名文件
new_names.append(new_movie_name)# 将修改后的文件名添加到列表中
return new_names
def move_in_one_dir(folder):
"""
将文件夹中的电影文件移动到同一个文件夹,并按照前缀进行分类
:param folder: 文件夹路径
"""
all_movies = get_all_movies_and_rename(folder, 'hhd800.com@')
series = {}# 使用字典将电影按照前缀分类
for movie in all_movies:
prefix = movie.split('-')
if prefix in series:
series.append(movie)
else:
series =
for prefix, file_list in series.items():
if len(file_list) > 1:# 如果有多个电影属于同一个前缀
folder_name = prefix
if not os.path.exists(folder_name):
os.mkdir(folder_name)
for file in file_list:
source = os.path.join(folder, file)
destination = os.path.join(folder_name, file)
shutil.move(source, destination)
这个优化方案主要涉及以下几点改进:
1. `get_all_movies_and_rename`函数中,使用`os.path.isfile()`函数判断文件是否为普通文件,避免处理文件夹;
2. 在`get_all_movies_and_rename`函数中,将修改后的文件名添加到列表`new_names`中,以便在`move_in_one_dir`函数中使用;
3. 在`move_in_one_dir`函数中,使用字典`series`将电影按照前缀分类;
4. 在`move_in_one_dir`函数中,将源文件夹的路径作为参数传入,避免在函数内部使用`os.getcwd()`;
5. 在`move_in_one_dir`函数中,添加了对目标文件夹是否已存在的判断,避免重复创建文件夹。
希望这些改进能让你的代码更加优雅和高效!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-4-9 21:49
当然可以优化代码!以下是一种可能的优化方案:
第一个函数中 return 返回了 所有的 文件名 ,这个怎么使用 slhlde 发表于 2024-04-09 21:55
第一个函数中 return 返回了 所有的 文件名 ,这个怎 ...
在第一个函数 `get_all_movies_and_rename` 中,返回了一个包含所有文件名的列表 `new_names`。如果你想在其他地方使用这个列表,可以将函数的返回值赋给一个变量,并通过该变量来访问列表中的文件名。
例如,在 `move_in_one_dir` 函数中,可以这样使用 `get_all_movies_and_rename` 返回的文件名列表:
def move_in_one_dir(folder):
"""将文件夹中的电影文件移动到同一个文件夹,并按照前缀进行分类"""
all_movies = get_all_movies_and_rename(folder, 'hhd800.com@')
# 使用 all_movies 变量访问文件名列表
for movie in all_movies:
# 其他操作...
然后,你就可以在 `move_in_one_dir` 函数中遍历 `all_movies` 列表,并进行相应的操作。
希望能解决你的问题!如果还有任何疑问,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]