我这里有一个Python脚本,运行时会在目录中打开一个随机视频文件:
import glob,random,os
files = glob.glob("*.mkv")
files.extend(glob.glob("*.mp4"))
files.extend(glob.glob("*.tp"))
files.extend(glob.glob("*.avi"))
files.extend(glob.glob("*.ts"))
files.extend(glob.glob("*.flv"))
files.extend(glob.glob("*.mov"))
file = random.choice(files)
print "Opening file %s..." % file
cmd = "rundll32 url.dll,FileProtocolHandler \"" + file + "\""
os.system(cmd)
来源:我的 super 用户帖子中的答案,'How do I open a random file in a folder, and set that only files with the specified filename extension(s) should be opened? '
这由 BAT 文件调用,其脚本如下:
C:\Python27\python.exe "C:\Programs\Scripts\open-random-video.py" cd
我把这个BAT文件放在我想打开随机视频的目录中。
在大多数情况下它工作得很好。但是,我无法让它打开文件名中包含 Unicode 字符(例如我的例子中的日语或韩语字符)的文件。
这是当 BAT 文件和 Python 脚本在目录上运行并打开文件名中包含 Unicode 字符的文件时出现的错误消息:
C:\TestDir>openrandomvideo.BAT
C:\TestDir>C:\Python27\python.exe "C:\Programs\Scripts\open-random-video.py"cd
文件名、目录名或卷标语法不正确。
请注意,该日志中的 .FLV 视频文件的文件名已从其原始文件名 (소시.flv) 更改为命令行日志中的“∩╗┐”。
编辑:我了解到上述命令行错误消息是由于 saving the BAT file as 'UTF-8 with BOM' 。将其另存为“ANSI 或 UTF-16”会显示以下消息,但仍然无法打开文件:
C:\TestDir>openrandomvideo.BAT
C:\TestDir>C:\Python27\python.exe "C:\Programs\Scripts\open-random-video.py" cd
Opening file ??.flv...
现在,该日志中的 .FLV 视频文件的文件名已从其原始文件名 (소시.flv) 更改为“??.flv”。在命令行日志中。
我在 64 位 Windows 7 上使用 Python 2.7。
如何允许打开文件名中包含 Unicode 字符的文件?
最佳答案
只需在任何地方使用 Unicode 文字,例如 u".mp4"
。如果您给 Python 中的 IO 函数提供 Unicode 输入,它们将返回 Unicode 文件名(它们在内部可能使用支持 Unicode 的 Windows API):
import os
import random
videodir = u"." # get videos from current directory
extensions = tuple(u".mkv .mp4 .tp .avi .ts .flv .mov".split())
files = [file for file in os.listdir(videodir) if file.endswith(extensions)]
if files: # at least one video file exists
random_file = random.choice(files)
os.startfile(os.path.join(videodir, random_file)) # start the video
else:
print('No %s files found in "%s"' % ("|".join(extensions), videodir,))
如果您想模拟网络浏览器打开视频文件的方式,那么您可以使用 webbrowser.open()
而不是 os.startfile()
,尽管前者可能无论如何,在 Windows 内部使用后者。
关于python - 如何允许打开文件名中包含 Unicode 字符的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031780/