Получить имя файла из открытого файла, а не путь к файлу

Скажем, я открыл файл с именем file1.mp3 в приложении PyQt5 с помощью диалогового окна файла и назначил его переменной, подобной этой:

song = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")
print(song[0])
url = QUrl.fromLocalFile(song[0])
self.playlist.addMedia(QMediaContent(url))

Как я могу получить имя файла вместо пути к файлу, чтобы я мог отображать его в строке состояния? Или, что еще лучше, есть ли функция типа «сейчас играет», которую я мог бы использовать или создать?


person chaNcharge    schedule 11.03.2018    source источник
comment
Почему бы не использовать разделение в строке для разделения фраз между «/» и «.» символы.   -  person    schedule 11.03.2018
comment
Возможный дубликат Как разбить путь dos на его компоненты на Python   -  person three_pineapples    schedule 11.03.2018
comment
Я знаю, как разделить путь в обычном питоне, но моя программа PyQt превращает путь в QUrl. Будет ли os.path.split работать так же с QUrl? Извините, я все еще изучаю PyQt.   -  person chaNcharge    schedule 11.03.2018


Ответы (3)


Есть несколько простых способов получить имя файла:

  • Использование QUrl:

song, _ = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")
print(song)
url = QUrl.fromLocalFile(song)
self.playlist.addMedia(QMediaContent(url))
your_statusbar.showMessage("now playing {}".format(url.fileName()))
  • Использование QFileInfo:

song, _ = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")
print(song)
url = QUrl.fromLocalFile(song)
self.playlist.addMedia(QMediaContent(url))
filename = QFileInfo(song).fileName()
your_statusbar.showMessage("now playing {}".format(filename))
  • Использование pathlib:

song, _ = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")
print(song)
url = QUrl.fromLocalFile(song)
self.playlist.addMedia(QMediaContent(url))

from pathlib import Path    

filename = Path(song).name
your_statusbar.showMessage("now playing {}".format(filename))
  • Использование os:

song, _ = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")
print(song)
url = QUrl.fromLocalFile(song)
self.playlist.addMedia(QMediaContent(url))

import os   

filename = song.rstrip(os.sep)
your_statusbar.showMessage("now playing {}".format(filename))

or:

song, _ = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")
print(song)
url = QUrl.fromLocalFile(song)
self.playlist.addMedia(QMediaContent(url))

import os   

_ , filename = os.path.split(os.sep)
your_statusbar.showMessage("now playing {}".format(filename))
person eyllanesc    schedule 11.03.2018

Не требует пояснений. Вам просто нужно перерезать веревку. И поскольку вы учитесь, я неправильно расскажу, чтобы вы поняли, почему.

filepath = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")[0]
filename = filepath.split("/")[-1]

print(filename)

После этого вы можете просто использовать

self.<statusbarname>.showMessage("Now playing {0} song or whatever".format(filename))

Однако это будет работать только в «некоторых» системах. Если вы хотите использовать это приложение на другом компьютере, вам следует сначала нормализовать путь (в некоторых системах используется //, а в других \ для папок), а затем вы разрежете его с помощью безопасной встроенной команды.

import os # Careful with this library, Read the documentation first
filepath = os.path.normpath(filepath) # Normalize it
filename = filepath.split(os.sep) # Slice it

Весь код должен работать так:

import os
filepath = QFileDialog.getOpenFileName(self, "Open Song", "~", "Sound Files (*.mp3 *.ogg *.wav *.m4a)")[0]
print(filepath)
filepath = os.path.normpath(filepath)
song = filepath.split(os.sep)
url = QUrl.fromLocalFile(filepath)
self.playlist.addMedia(QMediaContent(url))
self.<statusbarname>.showMessage("Now playing {0} song or whatever and it was at {1} folder".format(song, filepath))
person Saelyth    schedule 11.03.2018

программирование - это не волшебство, у вас есть путь к файлу, например: c: //myfolder/song.mp3 - предполагая, что ваши музыкальные файлы названы в честь песни, вы должны проанализировать URL-адрес для имени песни и установить заголовок / метку строки состояния на песня, которую вы сейчас играете. Я предлагаю вам пройти курс начального уровня по python, прежде чем добавлять в него фреймворки qt.

person Greg Milner    schedule 11.03.2018