Python ошибка записи файла из-за "/" в имени файла - PullRequest
1 голос
/ 23 февраля 2020

У меня есть такой фрагмент кода

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

Он загружает 30-секундные сэмплы исполнителей, данные извне с использованием spotify API.

Проблема в том, что в названии песни "/" (например, "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"

Что является лучшим решением или решением этой проблемы?

Ответы [ 2 ]

3 голосов
/ 23 февраля 2020

Если вы используете Linux, у вас не может быть косой черты в имени файла. Мое предложение состоит в том, чтобы заменить персонажа чем-то вроде «-»:

str(track['name']).replace('/', '-')
0 голосов
/ 23 февраля 2020

Вы можете использовать функцию 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
...