2016-06-30 11 views
0

私はPython3とftplibを使っています。python3 ftplib:mlsd()経由でdirが存在するか確認してください

私は、FTPサーバー上のディレクトリが存在するかどうかを確認する必要があります。 (もしそうでなければ、私はそれを作り出すことができます、すでにそれがあれば、私は直接それにcwdされます)。

私はここマレクMareckiからの方法を見てきました:これはまた、 'FOO' という名前のファイルにトリガすることHow to make Python check if ftp directory exists?

if 'foo' in [name for name, data in list(remote.mlsd())]:

問題。

これを行うPythonicの方法はありますか(mlsd()で明示的に)? NLSTは、()

おかげで多くのことを推奨されていません!

+0

は 'mlsd'はあなたのことを、あなたが定義することができる第二引数' facts'を、持っていますまた、型情報を取得したい(デフォルトでは、事実は空で、 'mlsd'は名前だけを取得する)。しかし、私はそれを確認するためにMLSDコマンドをサポートするFTPサーバーを見つけることができません。 – Arnial

+0

もう少し研究をして、ついにそれを実現しました:

 for name, facts in f.mlsd(".",["type"]): if facts["type"] == "dir" and name == "remote_ftp": print("isdir: "+ name) remotefoldername_exists = 1 break if(remotefoldername_exists == 0) ftp.mkd(remotefoldername) logging.debug("folder does not exitst, ftp.mkd: " + remotefoldername) else: logging.debug("folder did exist: " + remotefoldername) 
編集:コードフォーミングは痛みです:( –

答えて

1

を@arnialのおかげ私は次のようにアップカム:(MLSDまたはNSLT)

use_mlsd = 1 
if(use_mlsd): 
    # if ftp server supports mlsd, use it, nlst is maked as deprecated in ftplib 
    # check if remotefoldername exists 
    remotefoldername_exists = 0 
    for name, facts in f.mlsd(".",["type"]): 
    if facts["type"] == "dir" and name == "remote_ftp": 
     print("isdir: "+ name) 
     remotefoldername_exists = 1 
     break 
    if(remotefoldername_exists == 0) 
    ftp.mkd(remotefoldername) 
    logging.debug("folder does not exitst, ftp.mkd: " + remotefoldername) 
    else: 
    logging.debug("folder did exist: " + remotefoldername) 

else: 
    # nlst legacy support for ftp servers that do not support mlsd e.g. vsftp 
    items = [] 
    ftp.retrlines('LIST', items.append) 
    items = map(str.split, items) 
    dirlist = [ item.pop() for item in items if item[0][0] == 'd' ] 
    #print("directrys", directorys) 
    #print('remote_ftp' in directorys) 
    if not (remotefoldername in dirlist): 
     ftp.mkd(remotefoldername) 
     logging.debug("folder does not exitst, ftp.mkd: " + remotefoldername) 
    else: 
     logging.debug("folder did exist: " + remotefoldername) 
0

私はMLSDコマンドをサポートするサーバーを持っていないので、どのようにmlsdでこれを行うのかわかりません。 しかし、このコードはMLSDをサポートしなくても動作します。また

items = [] 
    ftp.retrlines('LIST', items.append) 
    items = map(str.split, items) 
    directorys = [ item.pop() for item in items if item[0][0] == 'd' ] 
    print("directrys", directorys) 
    print('foo' in directorys) 
関連する問題