【问题标题】:Python: Copy files to set locations depending on their namePython:根据文件名复制文件以设置位置
【发布时间】:2016-11-30 15:08:42
【问题描述】:

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

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 文件夹,它们都将替换文件夹中的对应项。

由于机器人的性质,不会使用它创建新文件,只会替换现有文件。

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

【问题讨论】:

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


    【解决方案1】:

    当我想运行机器人时遇到问题,它对我说:

    SyntaxError: Unexpected token '??='
    at wrapSafe (internal/modules/cjs/loader.js:1001:16)
    at Module._compile (internal/modules/cjs/loader.js:1049:27)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    at Module.load (internal/modules/cjs/loader.js:950:32)
    at Function.Module._load (internal/modules/cjs/loader.js:790:12)
    at Module.require (internal/modules/cjs/loader.js:974:19)
    at require (internal/modules/cjs/helpers.js:93:18)
    at Object.<anonymous> (C:\Users\Altamimi\Desktop\bot\node_modules\discord.js\src\rest\RESTManager.js:4:20)
    at Module._compile (internal/modules/cjs/loader.js:1085:14)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
    

    【讨论】:

    • 没有答案,而是另一个问题
    • 这并不能真正回答问题。如果您有其他问题,可以点击 提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
    【解决方案2】:

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

    应该是这样的:

    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
    

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 1970-01-01
      • 2016-03-09
      • 2022-01-20
      • 2020-07-14
      • 2019-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多