C++ 如何编写程序重命名mp4文件以匹配srt文件的名称?
所以我从Coursera下载了“计算机网络入门”课程的mp4和srt文件。但mp4和srt文件的名称之间存在细微差异 文件名示例如下:C++ 如何编写程序重命名mp4文件以匹配srt文件的名称?,c++,python,algorithm,file-rename,C++,Python,Algorithm,File Rename,所以我从Coursera下载了“计算机网络入门”课程的mp4和srt文件。但mp4和srt文件的名称之间存在细微差异 文件名示例如下: 1-1-1-1目标和动机(1253).mp4 1-1-1-1目标和动机(1253)。srt 1-2-1-2网络的使用(1316).mp4 1-2-1-2网络的使用(13_16).srt 1-3-1-3网络组件(1330).mp4 1-3-1-3网络组件(13_30).srt 1-4-1-4插座(1407).mp4 1-4-1-4插座(14_07).srt 1-5
1-1-1-1目标和动机(1253).mp4
1-1-1-1目标和动机(1253)。srt
1-2-1-2网络的使用(1316).mp4
1-2-1-2网络的使用(13_16).srt
1-3-1-3网络组件(1330).mp4
1-3-1-3网络组件(13_30).srt
1-4-1-4插座(1407).mp4
1-4-1-4插座(14_07).srt
1-5-1-5示踪路由(0736).mp4
1-5-1-5示踪路由(07_36).srt
1-6-1-6协议层(2225).mp4
1-6-1-6协议层(22_25).srt
1-7-1-7参考模型(1409).mp4
1-7-1-7参考模型(14_09).srt
1-8-1-8互联网历史(1239).mp4
1-8-1-8互联网历史(12_39).srt
1-9-1-9讲座大纲(0407).mp4
1-9-1-9讲座大纲(04_07).srt
2-1-2-1物理层概述(09_27).mp4
2-1-2-1物理层概述(09_27).srt
2-2-2-2媒体(856).mp4
2-2-2-2媒体(8_56).srt
2-3-2-3信号(1758).mp4
2-3-2-3信号(1758).srt
2-4-2-4调制(1100).mp4
2-4-2-4调制(11_00).srt
2-5-2-5限值(1243).mp4
2-5-2-5限值(12_43).srt
2-6-2-6链路层概述(0414).mp4
2-6-2-6链路层概述(04_14).srt
2-7-2-7框架(1126).mp4
2-7-2-7框架(11_26).srt
2-8-2-8错误概述(1745).mp4
2-8-2-8错误概述(17_45).srt
2-9-2-9错误检测(2317).mp4
2-9-2-9错误检测(23_17).srt
2-10-2-10纠错(1928).mp4
2-10-2-10纠错(19_28).srt
我想重命名mp4文件以匹配srt文件,这样vlc可以在我播放视频时自动加载字幕。有人会讨论什么算法来做这件事?您还可以提供任何语言的解决方案代码,因为我熟悉许多编程语言。但是Python和C++是比较好的。
编辑:
感谢所有回复的人。我知道重命名srt文件比用其他方法更容易。但是我认为重命名mp4文件会更有趣。有什么建议吗?如果所有这些文件都遵循此方案,Python实现几乎是微不足道的:
import glob, os
for subfile in glob.glob("*.srt")
os.rename(subfile, subfile.replace("_",""))
如果mp4还包含下划线,则需要为其添加额外的循环。如果所有这些文件都遵循此方案,则Python实现几乎是微不足道的:
import glob, os
for subfile in glob.glob("*.srt")
os.rename(subfile, subfile.replace("_",""))
如果mp4还包含下划线,则需要为其添加一个附加循环。
用于*.srt中的f;do mv$f${f%};已完成
,用于*.srt中的f;do mv$f${f%};完成
这里有一个python快速解决方案
如果您做出以下假设,那么工作很简单:
import os, sys, re
from glob import glob
def mv(src, dest):
print 'mv "%s" "%s"' % (src, dest)
#os.rename(src, dest) # uncomment this to actually rename the files
dir = sys.argv[1]
vid_files = sorted(glob(os.path.join(dir, '*.mp4')))
sub_files = sorted(glob(os.path.join(dir, '*.srt')))
assert len(sub_files) == len(vid_files), "lists of different lengths"
for vidf, subf in zip(vid_files, sub_files):
new_vidf = re.sub(r'\.srt$', '.mp4', subf)
if vidf == new_vidf:
print '%s OK' % ( vidf, )
continue
mv(vidf, new_vidf)
同样,这只是一个快速脚本。建议的改进:
argparse
assert
)这里有一个python的快速解决方案 如果您做出以下假设,那么工作很简单:
import os, sys, re
from glob import glob
def mv(src, dest):
print 'mv "%s" "%s"' % (src, dest)
#os.rename(src, dest) # uncomment this to actually rename the files
dir = sys.argv[1]
vid_files = sorted(glob(os.path.join(dir, '*.mp4')))
sub_files = sorted(glob(os.path.join(dir, '*.srt')))
assert len(sub_files) == len(vid_files), "lists of different lengths"
for vidf, subf in zip(vid_files, sub_files):
new_vidf = re.sub(r'\.srt$', '.mp4', subf)
if vidf == new_vidf:
print '%s OK' % ( vidf, )
continue
mv(vidf, new_vidf)
同样,这只是一个快速脚本。建议的改进:
argparse
assert
)这只是Zeta所说的一个实现:)
这只是Zeta所说的一个实现:)
呃,只是全部
.str
并删除下划线?算法很简单:对于每个mp4文件,找到其对应的srt文件(1),并将其重命名为与mp4文件相同的名称,但具有另一个扩展名。你应该试试看。(1) 这应该不难,因为在文件名的第一个字段中有识别信息。呃,只需全部.str
并删除下划线?算法很简单:对于每个mp4文件,找到其对应的srt文件(1),并将其重命名为与mp4文件相同的名称,但具有另一个扩展名。你应该试试看。(1) 这应该不难,因为您在文件名的第一个字段中有标识信息。虽然有效,但这只适用于类似于bash
的环境。它不能在Windows上使用:(。虽然有效,但它只适用于类似于bash
的环境。它不能在Windows上使用:(.似乎OP希望重命名mp4
s而不是srt
。我编辑了您的答案,因为它最适合此任务。感谢shx2和@Zeta。此脚本完全符合我的要求,并感谢建议的改进。我稍后将尝试进行改进。似乎OP希望这样做