从打开的文件中获取文件名,而不是文件路径
Get file name from an opened file, not a file path
假设我使用文件对话框在 PyQt5 应用程序中打开了一个名为 file1.mp3 的文件,并将其分配给如下变量:
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))
如何获取文件名而不是文件路径,以便将其显示在状态栏中?或者更好的是,有没有我可以使用或创建的类似 "now playing" 的函数?
编程不是魔法,你有一个文件路径,即:
c://myfolder/song.mp3 - 假设您的音乐文件以歌曲命名,您必须解析歌曲名称的 url 并将状态栏 title/label 设置为您当前正在播放的歌曲玩。我建议您在 python 上学习 lvl 入门课程,然后再将 qt 框架混入其中。
Self-explanatory。您只需要对字符串进行切片。因为你在学习,我会把它切错,让你找出原因。
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))
但是,这仅适用于 "some" 系统。如果您想在另一台计算机上使用该应用程序,您应该首先规范化路径(一些系统使用 // 和其他 \ 作为文件夹),然后使用安全的 built-in 命令对其进行切片。
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))
有几种获取文件名的简单方法:
- 使用
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))
或:
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))
假设我使用文件对话框在 PyQt5 应用程序中打开了一个名为 file1.mp3 的文件,并将其分配给如下变量:
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))
如何获取文件名而不是文件路径,以便将其显示在状态栏中?或者更好的是,有没有我可以使用或创建的类似 "now playing" 的函数?
编程不是魔法,你有一个文件路径,即: c://myfolder/song.mp3 - 假设您的音乐文件以歌曲命名,您必须解析歌曲名称的 url 并将状态栏 title/label 设置为您当前正在播放的歌曲玩。我建议您在 python 上学习 lvl 入门课程,然后再将 qt 框架混入其中。
Self-explanatory。您只需要对字符串进行切片。因为你在学习,我会把它切错,让你找出原因。
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))
但是,这仅适用于 "some" 系统。如果您想在另一台计算机上使用该应用程序,您应该首先规范化路径(一些系统使用 // 和其他 \ 作为文件夹),然后使用安全的 built-in 命令对其进行切片。
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))
有几种获取文件名的简单方法:
- 使用
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))
或:
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))