Python:根据文件名称复制文件以设置位置

时间:2016-07-26 19:58:21

标签: python-3.x automation copy updates overwrite

我目前正在制作Disocrd机器人,其中一个特点是更新速度非常快(最大限度地减少停机时间)。为了做到这一点,在重启脚本中我们有代码检查是否安装了usb,如果是,则需要将其上的文件移动到bots文件夹中,然后更新机器人。

async def cmd_restart(self, channel):
    await self.safe_send_message(channel, ":wave:")
    await self.disconnect_all_voice_clients()
    if os.path.exists(/dev/[usb ID]/Update.zip):
        zip_ref = zipfile.ZipFile(/dev/[usb ID]/Update.zip, 'r')
        zip_ref.extractall(/root/MusicBot/musicbot)
        zip_ref.close()
    raise exceptions.RestartSignal

问题是,随着僵尸程序的增长,文件已迁移到多个文件夹中,并且此脚本不再起作用。 我们需要将文件提取到不同的位置,具体取决于它们的名称。

例如'bot.py'将进入musicbot文件夹,而config.ini将进入config文件夹,它们将替换文件夹中的对应文件。

由于僵尸程序的性质,不会使用此文件创建新文件,只会替换现有文件。

原谅我漫无目的,解释起来感觉过于复杂。

1 个答案:

答案 0 :(得分:0)

首先,您需要获取所有文件名的列表。然后你可以检查它们并将文件放在各自的目录中。

应该是这样的:

import os
import shutil

async def cmd_restart(self, channel):
    await self.safe_send_message(channel, ":wave:")
    await self.disconnect_all_voice_clients()
    if os.path.exists("/dev/[usb ID]/Update.zip"):
        zip_ref = zipfile.ZipFile("/dev/[usb ID]/Update.zip", 'r')
        zip_ref.extractall("/root/MusicBot/musicbot/tmpExtract")
        zip_ref.close()
        files = os.listdir("/root/MusicBot/musicbot/tmpExtract") # get a list of all files that were in the zip
        for filename in files:   #check every file 
            if (filename == "meetsYourCondition.conf"):
                shutil.move("/root/MusicBot/musicbot/tmpExtract/meetsYourCondition.conf", "/root/MusicBot/musicbot/DirectoryYouWantItToGoTo")
            #elif (filename == "meetsYourNextCondition.conf"):
            #...
            # you get the idea
    raise exceptions.RestartSignal