不支持使用 + 运算符连接 'WindowsPath' 类型和 'str' 类型的操作数

10

我正在处理的代码抛出了错误Unsupported operand type(s) for +: 'WindowsPath' and 'str'。我已经尝试了很多方法,但没有一个能解决这个问题(除了删除具有错误的行,但那并不有用)。

为了背景,这个脚本(完成后)应该:

  1. 基于您键入的ID在指定在SongsPath.txt中的目录中查找文件(mp3)
  2. 备份它
  3. 然后将其替换为另一个文件(以前一个文件的名称重命名)

以便获取这些文件的程序播放新歌曲而不是旧歌曲,但随时可以恢复到原始歌曲。(这些歌曲是从newgrounds下载并通过其newgrounds音频门户ID保存的)

我正在使用Python 3.6.5

import os
import pathlib
from pathlib import Path

nspt = open ("NewSongsPath.txt", "rt")
nsp = Path (nspt.read())
spt = open("SongsPath.txt", "rt")
sp = (Path(spt.read()))
print("type the song ID:")
ID = input()
csp = str(path sp + "/" + ID + ".mp3") # this is the line throwing the error.
sr = open(csp , "rb")
sw = open(csp, "wb")
print (sr.read())

Path() 不会返回一个字符串,它会返回一个 Path 对象。 - Barmar
始终共享完整的错误消息。你从这个错误中理解了什么?我建议使用上下文管理器来处理文件对象。 - AMC
path sp 是复制错误吗?应该只是 sp 吗? - Barmar
2个回答

21
你所遇到的情况是使用“+”符号来连接两种不同类型的数据。
与其使用错误行:
csp = str(path sp + "/" + ID + ".mp3")

试着这样使用它:

csp = str(Path(sp))
fullpath = csp + "/" + ID + ".mp3"

使用'fullpath'变量来打开文件。


谢谢,我不知道Path()返回的不仅仅是一个字符串。 - Moonaliss
2
这有几个问题。它假设路径分隔符是“/”,并且仅将Path转换为字符串以执行可以使用Path对象本身完成的操作。如果您要使用Path,请继续使用Path。不要来回切换。 - tdelaney

11

pathlib.Path使用除法运算符连接路径。无需将其转换为字符串然后连接,只需使用Path对象的__div__运算符即可。

csp = sp/(ID + ".mp3")

如果您愿意,您还可以使用增广除法来更新sp本身。

sp /= ID + ".mp3"
在这两种情况下,您仍然拥有一个Path对象,可以在脚本的其余部分继续使用它。没有理由让您的脚本将其转换为字符串。您可以在打开调用中使用Path对象,或者更好地,在Path对象上使用open方法。
csp = sp / (ID + ".mp3")
sr = csp.open("rb")
sw = csp.open("wb")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接