如何从不同的函数调用变量?

How can I call a variable from differnent function?

在第一个函数中,我尝试 return newFolder 以便我可以使用它 在第二个功能中。但是当调用第二个函数时,它将继续循环整个第一个函数,而不是仅使用 newFolder 变量。在函数外使用 global 或定义 newPath 时,它工作正常。我只是想知道是否有一种方法可以操纵它在函数内部工作?

import os
import shutil

directory = input("Enter the desired directory: ")

def dir_list():
    os.chdir(directory)
    subFiles = os.listdir()
    return subFiles


def creating_dir():
    newPath = input("Enter Folder name: ")
    newFolder = (directory+'/'+newPath)
    if not os.path.exists(newFolder):
        os.makedirs(newFolder)

    return newFolder


def moving_files():
    for file in dir_list():
        if file.endswith('.gif'):
            shutil.move(file, creating_dir())
        else:
            break



def main():

    dir_list()

    creating_dir()

    moving_files()


if __name__ == "__main__":
    main()

您需要类似下面的代码。

我对你的代码做了一些修改。主要变化是我将 directory 作为参数传递给每个函数。我还将 newFolder 名称传递给 move_files 函数。将 args 传递给函数通常比从全局变量读取数据更好。

import os
import shutil

def dir_list(directory):
    os.chdir(directory)
    subFiles = os.listdir()
    return subFiles

def get_dir(directory):
    ''' Get folder name in `directory`, and create it if it doesn't exist '''
    newPath = input("Enter destination folder name: ")
    newFolder = os.path.join(directory, newPath)
    if not os.path.exists(newFolder):
        os.makedirs(newFolder)
    return newFolder

def move_files(directory, newFolder):
    ''' Move GIF files to `newFolder` '''
    for file in dir_list(directory):
        if file.endswith('.gif'):
            fullname = os.path.join(directory, file)
            #moves .gif to another folder
            shutil.move(fullname, newFolder)

def main():
    # Base directory
    directory = input("Enter the desired directory: ")
    newFolder = get_dir(directory)
    move_files(directory, newFolder)


if __name__ == "__main__":
    main()

请注意,我去掉了 break 语句。这样 break,文件移动功能会在看到非 GIF 文件时立即停止。在我的版本中,非 GIF 会被简单地跳过。

另请注意,os.listdir 函数只是 returns 基本文件名 而不是 完整文件路径。因此,要获得完整的文件名,我们必须将 os.listdir 返回的列表中的文件名连接到 directory

我用os.path.join将目录名加入基本文件名,我也用它构造newFolder名称。这比边做边加入更安全、更便携,例如

directory + '/' + file

在 Python 3.6.0 上测试。如果您将 input 调用更改为 raw_input,它也适用于 Python 2。

请注意,目标文件夹可以是绝对路径,或者您可以在 directory 中提供相对于源目录的路径。