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

时间:2017-03-21 04:03:40

标签: python python-3.x python-3.6

在第一个函数中,我试图返回newFolder,以便我可以使用它 在第二个功能。但是当调用第二个函数时,它将循环遍历整个第一个函数,而不是仅使用newFolder变量。在函数外使用全局或定义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()

1 个答案:

答案 0 :(得分:0)

你想要类似下面的代码。

我对您的代码进行了一些更改。主要的变化是我将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函数只返回基本文件名而不是完整文件路径。因此,要获取完整文件名,我们必须将os.listdir返回的列表中的文件名加入directory

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

directory + '/' + file

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

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