質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1195閲覧

pythonでifが動作しない。

sekkei_no_hito

総合スコア6

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

FTP

FTP(File Transfer Protocol)は、ネットワークでのファイル転送を行うための通信プロトコルの1つである。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/05 02:25

前提・実現したいこと

クライアント側からftpサーバーにディレクトリを作成し、ファイルを転送したい。
ディレクトリ作成からファイル転送まではできるようになったが、同名のディレクトリが
ある場合にエラーが起きるため、先に同名のディレクトリがあるかを検出し、
あった場合には削除してからディレクトリを作成するようにしたい。

同名のディレクトリがない場合には、エラーが出ずに動作するが、
同名のディレクトリがある場合には、エラーをはいてしまう。
そのため、ifの部分が動作していないと考えられる。
どのようにすればifの部分が動くようになるでしょうか。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "test.py", line 72, in <module> main() File "test.py", line 64, in main ftp_upload(hostname, username, password, upload_file, dir) File "test.py", line 44, in ftp_upload ftp.mkd(dir) File "C:\Python27\lib\ftplib.py", line 589, in mkd resp = self.sendcmd('MKD ' + dirname) File "C:\Python27\lib\ftplib.py", line 251, in sendcmd return self.getresp() File "C:\Python27\lib\ftplib.py", line 226, in getresp raise error_perm, resp ftplib.error_perm: 550 Cannot create a file when that file already exists.

該当のソースコード

# -*- coding: utf8 -* import ftplib import os.path def ftp_upload(hostname, username, password, upload_file, dir): ftp = ftplib.FTP(hostname) ftp.set_pasv("true") ftp.login(username, password) fp = open(upload_file, 'rb') if os.path.exists(dir): ftp.delete(dir + '/' + upload_file) ftp.rmd(dir) ftp.mkd(dir) s = dir + '/'+upload_file ftp.storbinary('STOR '+s, fp) ftp.close() fp.close() def main(): hostname = "***.***.**.**" upload_file = "test.py" username = "hoge" password = "hoge" dir = "hogehoge" ftp_upload(hostname, username, password, upload_file, dir) if __name__ == '__main__': main()

試したこと

補足情報(FW/ツールのバージョンなど)

windowsでpython2.7をつかってます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

if が動作しない、んじゃなく、動作してるんだけどディレクトリの削除に失敗してるだけ、なんではないかと。

ホンマに動作してないのか確認してみるべし
#printでも入れれば確認できるでしょ

投稿2019/12/05 04:27

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sekkei_no_hito

2019/12/05 05:01

printを入れたところ動作確認できました。 ftpのコードの中にos.pathを使ったため、Trueにならなかったみたいです。 ftpのオブジェクトで代用できるものはないでしょうか
y_waiwai

2019/12/05 05:03

そのdir変数には何がはいってますか? ちゃんとフルパスはいってるんでしょうか
sekkei_no_hito

2019/12/05 05:08

サーバー側とLANケーブルで繋いでありまして、ftpのサーバーが1つしかないのでフルパスでなくてもファイル操作できることは試してあります。フルパスを入れて試したりもしましたがダメでした。
y_waiwai

2019/12/05 05:37

ああ、FTPでしたね なら、FTP.dir関数でディレクトリがあるかを確認するって話になりますね 存在するかどうか、ではなく、その名前があるかどうかって関数なので、ちょっと修正がいりますね
sekkei_no_hito

2019/12/05 07:34

解決しました。 ありがとうございました。
guest

0

python3

1print(os.path.exists(dir))

この結果はどうなりますか

投稿2019/12/05 02:42

編集2019/12/05 06:27
horiegom

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sekkei_no_hito

2019/12/05 03:44

ご回答ありがとうございます。 ない場合に作るではなく、ある場合に消すを動かしたいのですが、どのようにすればよろしいでしょうか
horiegom

2019/12/05 03:56

結果は一緒では?
sekkei_no_hito

2019/12/05 04:57

そうなると同名のディレクトリがあった場合にそのままになってしまいます。 同名のディレクトリがあった場合には、それを消してから新たなディレクトリを作りたいのです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問