如何获得没有此错误的正确文件目录?

时间:2019-05-06 02:23:19

标签: python directory

因此,我正在编写一个脚本,该脚本读取一堆文本文件(每首歌曲一个)以获取歌词。它的工作原理是输入一个歌词短语,脚本将扫描所有可用文件的歌词,并告诉您歌曲的名称。问题是斜杠不起作用。我在“ /”和“ \”之间更改了斜杠,但遇到了错误。

使用正斜杠时,会看到以下内容:

  

“ OSError:[Errno 22]无效的参数:'C:/ Users / [My   名称] /桌面/MusicLyricSearch/AllSongs/Old_Town_Road.txt'“

当我放回斜杠时,我得到了错误:

  

“ SyntaxError:(unicode错误)'unicodeescape'编解码器无法解码字节   位置3-4:截断\ UXXXXXXXX逃脱”。

我还看到了许多其他有关如何执行此操作的信息,例如: Searching multiple text files for two strings?(unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape

所以,第一个链接实际上就是代码,但是我得到了错误

  

“ SyntaxError:(unicode错误)'unicodeescape'编解码器无法解码字节   位置3-4:截断\ UXXXXXXXX逃脱”

第二个解决此问题的链接也没有帮助

这是我的代码:

from os import listdir

lyricSearch = input("Input the phrase from the song: ")

with open("C:/Users/[My Name]/Desktop/MusicLyricSearch/AllSongs/results.txt", "w") as f:
    for filename in listdir("C:/Users/[My Name]/Desktop/MusicLyricSearch/AllSongs"):
        with open(" C:/Users/Traner/Desktop/MusicLyricSearch/AllSongs/" + filename) as currentFile:
            lyrics = currentFile.read()
            if(lyricSearch in lyrics):
                f.write("The song is", filename)
            else:
                f.write("Error: Could not find lyrics in any songs")

我希望获得将其更改为我的代码,以便向我显示歌曲歌词的文件名,而不是我得到了错误。

P.S。您可能会说,因为我基本上是复制代码,所以我对使用python进行编码非常陌生。

1 个答案:

答案 0 :(得分:0)

from os import listdir

lyricSearch = input("Input the phrase from the song: ")

with open(r"C:\Users\[My Name]\Desktop\MusicLyricSearch\AllSongs\results.txt", "w") as f:
    for filename in listdir(r"C:\Users\[My Name]\Desktop\MusicLyricSearch\AllSongs"):
        with open(r"C:\Users\Traner\Desktop\MusicLyricSearch\AllSongs\" + filename) as currentFile:
            lyrics = currentFile.read()
            if(lyricSearch in lyrics):
                f.write("The song is", filename)
            else:
                f.write("Error: Could not find lyrics in any songs")

错误来自\U,该错误在写入\User时发生。这作为八字符unicode转义的开始,但是由于您继续使用文件路径,因此python无法解释该转义码并吐出错误。字符串开头的r强制将其视为原始字符串,因此不考虑Unicode转义。