如何从不同的函数调用变量?
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
中提供相对于源目录的路径。
在第一个函数中,我尝试 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
中提供相对于源目录的路径。