使用python下载MEGA文件时出现问题

问题描述 投票:0回答:2

我正在尝试使用 Python

mega.py
库中的以下代码从我的 MEGA 帐户下载文件:

from mega import Mega

mega = Mega()
m = mega.login('[email protected]', 'example')
file = m.find('example.txt')
m.download(file, 'D:\\Desktop')

然而,它总是会回来:

 Traceback (most recent call last):

  File "D:\Programas\aNaconda\lib\shutil.py", line 788, in move
    os.rename(src, real_dst)

PermissionError: [WinError 32] The file is already being used by another process: 'C:\\Users\\vrida\\AppData\\Local\\Temp\\megapy_xdste432' -> 'example.txt'


During handling of the above exception, another exception occurred:

Traceback (most recent call last):

  File "<ipython-input-26-c3f75106fafb>", line 1, in <module>
    m.download(file)

  File "D:\Programas\aNaconda\lib\site-packages\mega\mega.py", line 564, in download
    return self._download_file(file_handle=None,

  File "D:\Programas\aNaconda\lib\site-packages\mega\mega.py", line 745, in _download_file
    shutil.move(temp_output_file.name, output_path)

  File "D:\Programas\aNaconda\lib\shutil.py", line 803, in move
    os.unlink(src)

PermissionError: [WinError 32] The file is already being used by another process: 'C:\\Users\\vrida\\AppData\\Local\\Temp\\megapy_example' 

实际上,当我进入文件夹(C:\Usersrida\AppData\Local\Temp)时,我发现一个临时文件,就像我要下载的文件一样,但名为megapy_example

我看到以下网站有一个解决问题的讨论:

https://www.reddit.com/r/learnpython/comments/mw6is2/download_file_from_mega_using_megapy/

要求将以下行添加到代码中:

try:
      m.download(file, 'D:\\Desktop')
except PermissionError:
      continue

就我而言,continue命令不起作用,所以我只需输入pass命令。代码运行了,但是不知道文件是否真的保存了

有人可以帮助我吗?我真的需要下载文件并保存它们。

如果它不能通过

mega.py
库工作,你们会以某种方式知道如何通过 Python 从公共链接下载: https://mega.co.nz/#!cSZCELDb!5O57KMVMIgrPiH5fnaefWeNPDqoDWzGbY-sZkdTUdNk

python url download save temporary-files
2个回答
2
投票

库中有一个错误,它在移动文件之前没有关闭文件。您可以通过编辑源代码来修复错误:

  1. 打开文件
    D:\Programas\aNaconda\lib\site-packages\mega\mega.py
  2. 转到
    745
    行,即
    shutil.move(temp_output_file.name, output_path)
    行所在的位置。
  3. 在其上方添加
    temp_output_file.close()
  4. 保存并重试。

0
投票

-> 现在使用最新版本的 python 会出现更多错误,可能是因为使用了 Tenacity/Asyncio,这可能会有所帮助

就像其他人所说,您需要编辑 mega.py 路径文件,可能还需要编辑 Tenacity/Asyncio。 [如果你很懒,我做了一个脚本,可以自动修补文件,并为修改后的文件进行备份]

修复

mega.py

  1. [无限下载/访问错误] 在上面添加
    temp_output_file.close()
    shutil.move(temp_output_file.name, output_path)

make之后你现在应该得到其他错误,最新版本的python在使用

Tenacity/Asyncio
时有问题,所以当你尝试导入mega.py时你会得到一个错误,应该修复找到
Tenacity
目录并找到文件名为
_asyncio.py

修复

_asyncio.py
,您将需要更新一些代码

  1. 查找

    @asyncio.coroutine
    并将其替换为
    #@asyncio.coroutine

  2. 找到

    def call(self, fn, *args, **kwargs):
    并将其替换为
    async def call(self, fn, *args, **kwargs):

  3. 查找

    result = yield from fn(*args, **kwargs)
    并将其替换为
    result = await fn(*args, **kwargs)

  4. 找到

    yield from self.sleep(do)
    并将其替换为
    await self.sleep(do)

解决 python 3.10+ 的该问题的脚本 https://github.com/N1xUser/mega.py-FIX - 备份已制作并保存在

mega.py
_asyncio.py
的同一目录中,名称为
_asyncio_backup.py
mega_backup.py
我希望它对你有用

© www.soinside.com 2019 - 2024. All rights reserved.