【问题标题】:Python rename ftp upload files deletePython重命名ftp上传文件删除
【发布时间】:2012-07-28 06:22:28
【问题描述】:

我有一个脚本可以在将文件上传到 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'

【问题讨论】:

  • 应该是ftp.close() 而不是ftp.close
  • 嗨 - 当我尝试删除“文件”时,收集目录中所有 *.mp4 文件并上传它们的变量 - 我似乎无法弄清楚如何在上传后删除文件.所以如果我尝试 os.remove(files) 脚本就会关闭
  • 所以我希望脚本在文件上传后删除文件。对不起,我没有说得更清楚
  • 要让脚本删除文件,请使用os.unlink() 函数。我会注意删除内容。如果发生错误,您不希望丢失数据的唯一副本。
  • 放开文件没关系 - 它们是源代码的转码,因此我们可以随时重新生成它们,它们将再次出现在 Origin_dest 中

标签: python upload ftp rename


【解决方案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() 中添加了缺少的括号,以便调用该函数。

【讨论】:

  • 谢谢你 - 我在 Xserve 或 red hat linux 上运行它。但让我试试你的建议。
猜你喜欢
  • 2017-04-24
  • 2021-12-22
  • 1970-01-01
  • 2015-02-25
  • 1970-01-01
  • 2013-06-30
  • 2015-03-09
  • 1970-01-01
  • 2012-08-17
相关资源
最近更新 更多