Python 文件名中有“/”导致文件写入错误
Python file writing error because of "/" in the file name
我有这样的代码块
for track in (results['tracks']):
track_id_chunk.append(track['uri'])
print (str(z) + " - " + track['name'])
try:
r = requests.get(track['preview_url'], allow_redirects=True)
open('dataset/'+genres[x]+"/"+str(track['name'])+'.mp3', 'wb').write(r.content)
except requests.exceptions.RequestException as e:
print ("---------------------- Couldnt get "+artists[j]+" - "+track['name'] + " !!!")
continue
z+=1
它下载外部使用 spotify API 提供的艺术家的 30 秒样本。
问题是当歌曲名称中有“/”时(例如"War Pigs / Luke's Wall - 2014 Remaster"),文件操作会查找“/”之前的目录,找不到它并抛出错误:
FileNotFoundError: [Errno 2] No such file or directory: "dataset/metal/War Pigs / Luke's Wall - 2014 Remaster.mp3"
此问题的最佳实践解决方法或解决方案是什么?
如果您在 Linux 上,您的文件名中不能有斜线。
我的建议是将字符替换为其他内容,例如 '-':
str(track['name']).replace('/', '-')
您可以使用下面定义的 slugify
函数,
slugify(value)
代码:
def slugify(value):
"""
converts to lowercase, removes non-alpha characters,
and converts spaces to hyphens.
"""
value = re.sub(r'[^\w\s-]', '', value).strip().lower()
value = re.sub(r'[-\s]+', '-', value)
return value
通过以下方式将字符串转换为正确的文件名:
- 删除非字母数字、下划线、连字符、
或空格。
- 删除前导和尾随空格。
- 正在转换为小写。
- 用单个破折号替换任何空格或重复的破折号。
用法:
>>> slugify('War Pigs / Luke's Wall - 2014 Remaster')
输出:
war-pigs-lukes-wall-2014-remaster
我有这样的代码块
for track in (results['tracks']):
track_id_chunk.append(track['uri'])
print (str(z) + " - " + track['name'])
try:
r = requests.get(track['preview_url'], allow_redirects=True)
open('dataset/'+genres[x]+"/"+str(track['name'])+'.mp3', 'wb').write(r.content)
except requests.exceptions.RequestException as e:
print ("---------------------- Couldnt get "+artists[j]+" - "+track['name'] + " !!!")
continue
z+=1
它下载外部使用 spotify API 提供的艺术家的 30 秒样本。
问题是当歌曲名称中有“/”时(例如"War Pigs / Luke's Wall - 2014 Remaster"),文件操作会查找“/”之前的目录,找不到它并抛出错误:
FileNotFoundError: [Errno 2] No such file or directory: "dataset/metal/War Pigs / Luke's Wall - 2014 Remaster.mp3"
此问题的最佳实践解决方法或解决方案是什么?
如果您在 Linux 上,您的文件名中不能有斜线。 我的建议是将字符替换为其他内容,例如 '-':
str(track['name']).replace('/', '-')
您可以使用下面定义的 slugify
函数,
slugify(value)
代码:
def slugify(value):
"""
converts to lowercase, removes non-alpha characters,
and converts spaces to hyphens.
"""
value = re.sub(r'[^\w\s-]', '', value).strip().lower()
value = re.sub(r'[-\s]+', '-', value)
return value
通过以下方式将字符串转换为正确的文件名:
- 删除非字母数字、下划线、连字符、 或空格。
- 删除前导和尾随空格。
- 正在转换为小写。
- 用单个破折号替换任何空格或重复的破折号。
用法:
>>> slugify('War Pigs / Luke's Wall - 2014 Remaster')
输出:
war-pigs-lukes-wall-2014-remaster