【问题标题】:Determine if a ftp file is a regular file or folder with python ftp lib使用 python ftp lib 确定 ftp 文件是否是常规文件或文件夹
【发布时间】:2012-05-28 06:24:14
【问题描述】:

我一直在开发一个简单的 python 程序,它可以简单地连接到我的 nas 并清理我的一些文件名。我正在使用 python ftp lib 连接到 nas 并做我的事情。

我在这里只是想知道是否有人有一种检查服务器上的文件实际上是文件还是文件夹的好方法?

这是我正在使用的:

try:
     ftp.cwd(line) 
     #If we got here then this "line" is a folder
     # Do my folder stuff
     ftp._ftp.cwd('..') #don't forget to go back after it worked
except ftplib.error_perm:
     #An exception! So this means we are dealing with a file
     #So do some file stuff
except:
     #Sometimes you just can't get in the folder for some reason
     falsepos = falsepos + 1

我可以查看目录列表的输出,但这在不同平台上并不相同,我正在尝试构建一些即使我出于某种原因更换我的 nas 也能继续工作的东西。

我的代码中还有一个小错误。有时它仍然将文件夹视为常规文件...

你的意见?

(我使用的是 Python 2.7)

【问题讨论】:

    标签: python ftp


    【解决方案1】:

    我没有发现平台之间的任何差异。这在哪些平台上不起作用?:

    isFile = lambda e: e[0][0] != 'd'
    for e in ftp.dir('.'):
      if isFile(e):
        foo(e)
      else:
        bar(e)
    

    【讨论】:

    • 我在以前的帖子中读到过关于这个主题的一些 ftp 系统之间存在一些差异。而且没有标准输出。例如:stackoverflow.com/q/111954/1393744。所以这就是为什么我不想以这种方式检查它。如果我错了,请告诉我。
    • RFC for FTP 声明 LIST 命令不适合自动使用(搜索“(LIST)”)。
    • 对不起,“输入”的意外行为。 Python 是一种编程语言,它的库应该在自动上下文中工作,而不仅仅是一个很酷的命令行。如果平台之间存在差异,ftplib 应该抽象支持的平台,如果没有,那就是 Python 的增强建议。很抱歉,我不知道是哪种情况,到目前为止,这段代码对我有用,但我不能保证它会一直有效。
    • 你是绝对正确的。感谢您的明确和建设性的回答!
    • 显然,如果对这个话题有任何其他观点,我很想听听。
    猜你喜欢
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多