鱼C论坛

 找回密码
 立即注册
查看: 112|回复: 5

函数无法使用上一个return值

[复制链接]
发表于 2024-4-9 21:46:42 | 显示全部楼层 |阅读模式

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

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

x

import os
import 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('-')[0]
        if prefix in seires:
            seires[prefix].append(movie)
        else:
            seires[prefix] = [movie]
    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时 还需要写参数啊 ,

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-9 21:46:55 | 显示全部楼层
是的,当在一个函数中调用另一个函数时,如果被调用的函数有参数,那么在调用时需要提供相应的参数。在你的代码中,`get_all_movies_and_rename`函数有两个参数,即`folder`和`keyword`,所以在`move_in_one_dir`函数中调用时,需要提供这两个参数。

你可以根据实际需要,在调用`get_all_movies_and_rename`函数时传入对应的参数值。例如:

  1. get_all_movies_and_rename('I:\\MP4', 'hhd800.com@')
复制代码


这样,`move_in_one_dir`函数就能正常使用`get_all_movies_and_rename`函数的返回值了。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-9 21:48:28 | 显示全部楼层
FishC 发表于 2024-4-9 21:46
是的,当在一个函数中调用另一个函数时,如果被调用的函数有参数,那么在调用时需要提供相应的参数。在你的 ...

有办法优化我的代码吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 21:49:54 | 显示全部楼层
slhlde 发表于 2024-04-09 21:48
有办法优化我的代码吗


当然可以优化代码!以下是一种可能的优化方案:

  1. import os
  2. import shutil

  3. def get_all_movies_and_rename(folder, keyword):
  4.     """
  5.     删除文件名中的多余字符并重命名文件
  6.     :param folder: 文件夹路径
  7.     :param keyword: 要删除的关键字
  8.     :return: 文件列表
  9.     """
  10.     os.chdir(folder)  # 切换到目标文件夹
  11.     all_movies = os.listdir(folder)  # 获取文件夹中的所有文件
  12.     new_names = []
  13.    
  14.     for movie in all_movies:
  15.         if os.path.isfile(movie) and keyword in movie:
  16.             new_movie_name = movie.replace(keyword, '')  # 替换掉关键字
  17.             os.rename(movie, new_movie_name)  # 重命名文件
  18.             new_names.append(new_movie_name)  # 将修改后的文件名添加到列表中
  19.    
  20.     return new_names

  21. def move_in_one_dir(folder):
  22.     """
  23.     将文件夹中的电影文件移动到同一个文件夹,并按照前缀进行分类
  24.     :param folder: 文件夹路径
  25.     """
  26.     all_movies = get_all_movies_and_rename(folder, 'hhd800.com@')
  27.     series = {}  # 使用字典将电影按照前缀分类
  28.    
  29.     for movie in all_movies:
  30.         prefix = movie.split('-')[0]
  31.         if prefix in series:
  32.             series[prefix].append(movie)
  33.         else:
  34.             series[prefix] = [movie]
  35.    
  36.     for prefix, file_list in series.items():
  37.         if len(file_list) > 1:  # 如果有多个电影属于同一个前缀
  38.             folder_name = prefix
  39.             if not os.path.exists(folder_name):
  40.                 os.mkdir(folder_name)
  41.             
  42.             for file in file_list:
  43.                 source = os.path.join(folder, file)
  44.                 destination = os.path.join(folder_name, file)
  45.                 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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-9 21:55:17 | 显示全部楼层
FishC 发表于 2024-4-9 21:49
当然可以优化代码!以下是一种可能的优化方案:

第一个函数中 return 返回了 所有的 文件名 ,这个怎么使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-9 21:55:28 | 显示全部楼层
slhlde 发表于 2024-04-09 21:55
第一个函数中 return 返回了 所有的 文件名 ,这个怎 ...


在第一个函数 `get_all_movies_and_rename` 中,返回了一个包含所有文件名的列表 `new_names`。如果你想在其他地方使用这个列表,可以将函数的返回值赋给一个变量,并通过该变量来访问列表中的文件名。

例如,在 `move_in_one_dir` 函数中,可以这样使用 `get_all_movies_and_rename` 返回的文件名列表:

  1. def move_in_one_dir(folder):
  2.     """将文件夹中的电影文件移动到同一个文件夹,并按照前缀进行分类"""
  3.     all_movies = get_all_movies_and_rename(folder, 'hhd800.com@')
  4.     # 使用 all_movies 变量访问文件名列表
  5.     for movie in all_movies:
  6.         # 其他操作...
复制代码


然后,你就可以在 `move_in_one_dir` 函数中遍历 `all_movies` 列表,并进行相应的操作。

希望能解决你的问题!如果还有任何疑问,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 00:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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