使用完毕后如何删除文件?

时间:2019-02-09 11:01:19

标签: python windows moviepy

使用完文件后,我试图删除文件,但始终出现错误...

错误:

  

PermissionError:[WinError 32]该进程无法访问文件,因为该文件正在被另一个进程使用:'0.mp4'

我尝试关闭对象,但是它不起作用...

import os
from moviepy.editor import VideoFileClip, concatenate_videoclips

DEFAULT_HEIGHT = 720
DEFAULT_WIDTH = 1280

clip_names = ["0.mp4", "1.mp4"]

clips = []
for name in clip_names:
    clips.append(VideoFileClip(name).resize(width=DEFAULT_WIDTH,height=DEFAULT_HEIGHT))

final_clip = concatenate_videoclips(clips)
final_clip.write_videofile("video.mp4")

for clip in clips:
    clip.__del__()

for name in clip_names:
    os.remove(name)

我想使用os.remove删除文件...

1 个答案:

答案 0 :(得分:1)

您只是尝试简单地关闭剪辑吗?

for clip in clips:
    clip.close()

来自来源here

或者,如果您想在发生错误的情况下彻底执行此操作,请使用with上下文:

import contextlib

with contextlib.ExitStack() as stack:
    clips = []
    for name in clip_names:
        clip = VideoFileClip(name)
        stack.enter_context(contextlib.closing(clip))
        clips.append(clip.resize(width=DEFAULT_WIDTH,height=DEFAULT_HEIGHT))

    final_clip = concatenate_videoclips(clips)
    final_clip.write_videofile("video.mp4")

# exiting the `with` block released the clips
for name in clip_names:
    os.remove(name)

此方法使用ExitStack来跟踪剪辑。当程序退出with块时,将退出传递到enter_context的所有上下文,从而释放所有剪辑。