OS 在没有用户干预的情况下更改文件路径和名称时出错
OS Error file path and name being changed without user interference
我正在尝试使用库中的内置函数以下列方式读取 MIDI 文件 - mido
以读取此类文件。
mid = mido.MidiFile('..\Datasets\abel.mid')
错误:
OSError Traceback (most recent call last)
<ipython-input-34-5c67b78f0caf> in <module>()
----> 1 mid = mido.MidiFile('F:\AI\Music classification\Datasets\abel.mid')
~\Anaconda3\lib\site-packages\mido\midifiles\midifiles.py in __init__(self, filename, file, type, ticks_per_beat, charset, debug, clip)
313 self._load(file)
314 elif self.filename is not None:
--> 315 with io.open(filename, 'rb') as file:
316 self._load(file)
317
OSError: [Errno 22] Invalid argument: '..\Datasets\x07bel.mid'
如果我们观察错误的最后一行,我们会注意到文件名似乎已更改。为什么会这样?
如果我按以下方式更改代码,在文件名似乎已更改的地方添加一个额外的 \
,那么文件将被完美读取:
mid = mido.MidiFile('..\Datasets\abel.mid')
为什么当我添加一个额外的 \
时,代码有效?
Python 使用反斜杠进行字符串转义 - 这让您可以为字符序列定义不同的值。正如 \n
是换行符一样,\a
是十六进制字节 07
。您可以转义反斜杠本身,因此 \
只是一个反斜杠。您可以使用 "raw" 字符串(例如,`r"\a")一起禁用转义。
我正在尝试使用库中的内置函数以下列方式读取 MIDI 文件 - mido
以读取此类文件。
mid = mido.MidiFile('..\Datasets\abel.mid')
错误:
OSError Traceback (most recent call last)
<ipython-input-34-5c67b78f0caf> in <module>()
----> 1 mid = mido.MidiFile('F:\AI\Music classification\Datasets\abel.mid')
~\Anaconda3\lib\site-packages\mido\midifiles\midifiles.py in __init__(self, filename, file, type, ticks_per_beat, charset, debug, clip)
313 self._load(file)
314 elif self.filename is not None:
--> 315 with io.open(filename, 'rb') as file:
316 self._load(file)
317
OSError: [Errno 22] Invalid argument: '..\Datasets\x07bel.mid'
如果我们观察错误的最后一行,我们会注意到文件名似乎已更改。为什么会这样?
如果我按以下方式更改代码,在文件名似乎已更改的地方添加一个额外的 \
,那么文件将被完美读取:
mid = mido.MidiFile('..\Datasets\abel.mid')
为什么当我添加一个额外的 \
时,代码有效?
Python 使用反斜杠进行字符串转义 - 这让您可以为字符序列定义不同的值。正如 \n
是换行符一样,\a
是十六进制字节 07
。您可以转义反斜杠本身,因此 \
只是一个反斜杠。您可以使用 "raw" 字符串(例如,`r"\a")一起禁用转义。