Python shutil.move() 函数

Python shutil.move() Function

所以我编写了一个小 GUI 来控制我最近编写的一些代码,我有两个 tkinter 按钮,它们都分配了 shutil.move() 函数。当我单击一个按钮时,它会将所有内容移动到我希望它所在的文件夹中。单击另一个按钮后,它应该将文件移回另一个文件夹,但它不会移动它们,只是给我打印输出,而不是在 else 中打印输出,所以它在 if 语句中定义

这是我的代码

def startbot():
    global BOT
    print("Start bot pressed")
    if BOT == "OFF":
        print("Bot is off")
        for filename in file_stop:
            shutil.move(os.path.join(Stop, filename), Post)
            BOT = "ON"
            print("BOT:", BOT)
    else:
        print("Bot is already active.")


def stopbot():
    global BOT
    print("Stop bot Pressed")
    if BOT == "ON":
        print("Bot is on")
        for file_name in file_post:
            shutil.move(os.path.join(Post, file_name), Stop)
            BOT = "OFF"
            print("BOT:", BOT)
    else:
        print("Bot is already inactive.")

Post 是我这样创建的路径和停止点

Post = path + "/Post"
Stop = path + "/Stop"

在gui中选择路径变量,然后保存在文件中。

file_post和file_stop是在这里创建的

file_post = os.listdir(path + "/Post")
file_stop = os.listdir(path + "/Stop")

os.listdir returns 目录中文件的静态列表,而不是实时视图。文件移动后您将看不到列表变化:

>>> file_stop
['myfile1.txt', 'myfile2.txt']
>>> startbot()
... 
>>> file_stop
['myfile1.txt', 'myfile2.txt']

因此,您应该通过将 os.listdir 作为 for-loop:

的一部分放在函数中来生成所需的文件列表
def startbot():
    ... 
    if BOT == "OFF":
        print("Bot is off")
        for file_name in os.listdir(Stop):
            shutil.move(os.path.join(Stop, file_name), Post)
        BOT = "ON"  # Move this out of for-loop
        print("BOT:", BOT)
    ... 

def stopbot():
    ... 
    if BOT == "ON":
        print("Bot is on")
        for file_name in os.listdir(Post):
            shutil.move(os.path.join(Post, file_name), Stop)
        BOT = "OFF"  # Move this out of for-loop
        print("BOT:", BOT)
    ...