用电影名将字幕从movie_name列表重命名为subtitles_list
import os
os.chdir("C:/Users/PC/Desktop/movies")
movies = []
for movie in os.listdir():
movie_name,ext = os.path.splitext(movie)
movies.append(movie_name)
print(movie_name)
subs = []
for sub in os.listdir("C:/Users/PC/Desktop/subs"):
sub_name, ext = os.path.splitext(sub)
subs.append(sub_name)
print(sub_name)
for movie,sub in zip(movies,subs):
os.rename(sub,movie+".srt").........THE错误如下所示.
movie_1
movie_2
movie_3
movie_4
A
B
C
D
Traceback (most recent call last):
File "C:\Users\PC\Desktop\ABCD.PY", line 19, in <module>
os.rename(sub,movie+".srt")
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'A' -> 'movie_1.srt'如何处理这个错误?谢谢。
发布于 2021-03-28 08:06:42
你的描述中缺少了一些信息来帮助你。但我能猜出来给你一个答案
可能有一些原因导致了这个错误:
C:\Users\PC\Desktop\movies (os.chdir("C:/Users/PC/Desktop/movies"))C:\Users\PC\Desktop\subs (os.listdir("C:/Users/PC/Desktop/subs"))中列出文件C:\Users\PC\Desktop\movies。C:\Users\PC\Desktop\subs中的文件没有扩展名,否则当您尝试重命名它们时。你只使用他们的名字而不是他们的分号。所以他们很有可能不存在。要解决这个问题,我建议您使用绝对路径,而不仅仅是文件名。
我还建议您复制文件而不是重命名它们。那样的话,如果不是你想要的,你的原始文件还在那里。这是你所期望的结果,事后删除你的原始文件是微不足道的。因此,使用shutil.copy()更容易
下面是您可以通过最小的修改来解决这种情况的方法:
import os, os.path
import shutil
source_path = {
'movies' : r"C:\Users\PC\Desktop\movies",
'subtitles' : r"C:\Users\PC\Desktop\subs"
}
destination_path = r"C:\Users\PC\Desktop\movies"
movies = []
for movie in os.listdir(source_path['movies']):
movie_name,ext = os.path.splitext(movie)
movie_path = os.path.join(destination_path, movie_name)
movies.append(movie_path)
print(movie_path)
subs = []
for sub in os.listdir(source_path['subtitles']):
sub_path = os.path.join(source_path['subtitles'], sub)
subs.append(sub_path)
print(sub_path)
for movie, sub in zip(movies, subs):
shutil.copy(sub, movie + ".srt")所以这个版本:
os.path.join()为每个文件获取完整路径。但你还可以:
这会简化你的代码。看起来应该是:
import pathlib
import shutil
source_path = {
'movies' : pathlib.Path(r"C:\Users\PC\Desktop\movies"),
'subtitles' : pathlib.Path(r"C:\Users\PC\Desktop\subs")
}
destination_path = pathlib.Path(r"C:\Users\PC\Desktop\movies")
movies = [
destination_path / current_path.with_suffix('.srt').name
for current_path in source_path['movies'].iterdir()
]
print('\n'.join(str(current_movie) for current_movie in movies))
subs = list(source_path['subtitles'].iterdir())
print('\n'.join(str(current_sub) for current_sub in subs))
for movie, sub in zip(movies, subs):
shutil.copy(sub, movie)发布于 2021-03-27 20:29:02
问题是您没有在重命名调用中包含到字幕文件的完整路径!
本例只需使用f"{path}/{sub}",尽管路径库将更加健壮。
subs_path = "C:/Users/PC/Desktop/subs"
...
for name_movie, name_sub in zip(movies, subs):
path_sub = pathlib.Path(subs_path, name_sub)
os.rename(path_sub, name_movie + ".srt")此外,由于重命名是相当危险的,请考虑复制(这比较慢,但通常字幕文件相当小)和一些高级逻辑。
最后,仅仅测试集合的长度可能会在某种程度上保护您免遭不正确的删除(如果它们不相等,您知道有问题),因为zip不会像您预期的那样例外地保护您。
>>> list(zip([1,2], [3,4,5]))
[(1, 3), (2, 4)]
>>> list(zip([1,2,6], [3,4]))
[(1, 3), (2, 4)]。。但是,您可能还会发现,您已经并希望保留多个字幕文件,因此,考虑如何处理,也许对于非精确名称的模糊匹配可能会使您的生活更轻松。
https://stackoverflow.com/questions/66742367
复制相似问题