为什么从我可以在 Python 中读取的目录复制时权限被拒绝?
Why am I getting permission denied when copying from a directory I can read in Python?
我的家庭服务器 (Ubuntu) 上有一个非常大的混合文件类型的 Plex 库。我正在尝试使用 python 将兼容类型提取到客户端 iTunes 库中。我使用给我完全权限的凭据将它安装在 Windows 11 中作为 M:
。这是我尝试 运行:
的片段
import os
from pathlib import Path
import shutil
for f in Path("M:/Music").rglob("**/*"):
if not str(f).endswith(".opus"): # iTunes doesn't like OPUS files
filename = os.path.split(f)[1]
local_root = Path("C:/Users/username/Music/iTunes Media/Automatically Add to iTunes").as_posix()
album_dir = Path(f).parent.as_posix()
album_dir_name = os.path.split(album_dir)[1]
artist_dir = Path(album_dir).parent.as_posix()
artist_dir_name = os.path.split(artist_dir)[1]
new_artist_dir = os.path.join(local_root, artist_dir_name)
new_album_dir = os.path.join(new_artist_dir, album_dir_name)
new_file = os.path.join(new_album_dir, filename)
shutil.copy(f, new_file)
shutil.copy
电话给我:
PermissionError: [Errono 13] Permission denied: 'M:\Music\Academy of St Martin in the Fields' # the first artist path in the rglob
我能够毫无问题地遍历并列出驱动器上的所有文件。在 Windows 中,我以完全权限安装了驱动器,我认为它是通过 os
模块继承给 Python 的。在我的工作场所,我能够 copy/move 从 NAS 到本地驱动器而无需任何额外登录,也是一个混合 Windows/Linux 环境。
我见过几个案例,人们通过 subprocess
使用 pywin32
或 Windows 自己的 net use
命令,但没有详尽的示例,也没有为我工作。如何使用 Python 从我安装的网络共享中复制内容?
如果您尝试打开一个文件,但您的路径是一个文件夹,就会发生这种情况。
这很容易发生错误。
要防御这种情况,请使用:
import os
path = r"my/path/to/file.txt"
assert os.path.isfile(path)
with open(path, "r") as f:
pass
如果路径实际上是一个文件夹,断言将失败。
我的家庭服务器 (Ubuntu) 上有一个非常大的混合文件类型的 Plex 库。我正在尝试使用 python 将兼容类型提取到客户端 iTunes 库中。我使用给我完全权限的凭据将它安装在 Windows 11 中作为 M:
。这是我尝试 运行:
import os
from pathlib import Path
import shutil
for f in Path("M:/Music").rglob("**/*"):
if not str(f).endswith(".opus"): # iTunes doesn't like OPUS files
filename = os.path.split(f)[1]
local_root = Path("C:/Users/username/Music/iTunes Media/Automatically Add to iTunes").as_posix()
album_dir = Path(f).parent.as_posix()
album_dir_name = os.path.split(album_dir)[1]
artist_dir = Path(album_dir).parent.as_posix()
artist_dir_name = os.path.split(artist_dir)[1]
new_artist_dir = os.path.join(local_root, artist_dir_name)
new_album_dir = os.path.join(new_artist_dir, album_dir_name)
new_file = os.path.join(new_album_dir, filename)
shutil.copy(f, new_file)
shutil.copy
电话给我:
PermissionError: [Errono 13] Permission denied: 'M:\Music\Academy of St Martin in the Fields' # the first artist path in the rglob
我能够毫无问题地遍历并列出驱动器上的所有文件。在 Windows 中,我以完全权限安装了驱动器,我认为它是通过 os
模块继承给 Python 的。在我的工作场所,我能够 copy/move 从 NAS 到本地驱动器而无需任何额外登录,也是一个混合 Windows/Linux 环境。
我见过几个案例,人们通过 subprocess
使用 pywin32
或 Windows 自己的 net use
命令,但没有详尽的示例,也没有为我工作。如何使用 Python 从我安装的网络共享中复制内容?
如果您尝试打开一个文件,但您的路径是一个文件夹,就会发生这种情况。
这很容易发生错误。
要防御这种情况,请使用:
import os
path = r"my/path/to/file.txt"
assert os.path.isfile(path)
with open(path, "r") as f:
pass
如果路径实际上是一个文件夹,断言将失败。