0

FTPにアップロードする前にファイルの名前を変更するスクリプトがあります。最初にパターン「_768x432_1700_m30_」を検索し、パターンが「new」に置き換えられた場合は、ディレクトリ内のすべての「.mp4」ファイルをFTPサーバーにアップロードします。しかし、何らかの理由で、アップロード後にファイルを削除できないように見えますか?また、このスクリプトを実行するためのより良い方法はありますか?(私はPythonにかなり慣れていません)

#!/usr/bin/python

import os
import glob
import fnmatch
import sys
import ftplib
import shutil
import re
from ftplib import FTP



Host='xxxxxx.xxxxx.xxxx.com'
User='xxxxxxx'
Passwd='xxxxxxx'

ftp = ftplib.FTP(Host,User,Passwd) # Connect


dest_dir = '/8619/_!/xxxx/xx/xxxxx/xxxxxx/xxxx/'
Origin_dir = '/8619/_!/xxxx/xx/xxxxx/xxxxxx/xxxx/'
pattern = '*.mp4'
file_list = os.listdir(Origin_dir)


for filename in glob.glob(os.path.join(Origin_dir, "*_768x432_1700_m30_*")):
    os.rename(filename, filename.replace('_768x432_1700_m30_','_new_' ))
    video_list = fnmatch.filter(filename, pattern)

print(video_list)

print "Checking %s for files" % Origin_dir
for files in file_list:
    if fnmatch.fnmatch(files, pattern):
        print(files)
        print "logging into %s FTP" % Host
        ftp = FTP(Host)
        ftp.login(User, Passwd)
        ftp.cwd(dest_dir)
        print "uploading files to %s" % Host
        ftp.storbinary('STOR ' + dest_dir+files, open(Origin_dir+files, "rb"), 1024)
        ftp.close
        print 'FTP connection has been closed'
4

1 に答える 1

1

次の行
ftp.storbinary('STOR ' + dest_dir+files, open(Origin_dir+files, "rb"), 1024) でファイルを開きますが、そのファイルへの参照を保持して閉じません。Windowsでは(これはWindowsで実行していると思います)、プロセスが開いている間はファイルを削除できません。

代わりに次を試してください。

print "uploading files to %s" % Host
with open(Origin_dir+files, "rb") as f:
    ftp.storbinary('STOR ' + dest_dir+files, f, 1024)
ftp.close()
print 'FTP connection has been closed'

違いは次のとおりです。

  • withステートメントを使用して、成功したか例外が発生したかに関係なく、ファイルが閉じられるようにします。
  • open()呼び出しの結果を名前に割り当てます( f
  • ftp.close()関数が呼び出されるように、欠落している括弧を追加しました。
于 2012-07-30T16:04:37.097 に答える