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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

4955閲覧

python mkdirでフォルダの作成でエラーが出る

dendendenjirou

総合スコア40

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/09/15 12:57

編集2018/09/15 13:29

前提・実現したいこと

複数の日付にて撮影されたのDICOM画像があります
そのDICOM画像の検査日付および、イメージナンバーでファイル名を変更
DICOM画像フォルダ内に検査日付名のフォルダを作成し、そのフォルダに画像を格納しようとプログラム作成中です。
(画像をフォルダに格納するプログラムまで書けていません・・・・)

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

現在、ファイル名の変更はできるのですが、検査日付名のフォルダを作成しようとすると

Traceback (most recent call last): File "C:/Users/PycharmProjects/conturing/change_filename.py", line 29, in <module> main() File "C:/Users/PycharmProjects/conturing/change_filename.py", line 21, in main os.mkdir(im_date) FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: '20180807'

とエラーメッセージが出てしまいます。
該当フォルダを見るも、存在はしていません。
また、パソコン内にてフォルダを検索してみても存在していません。

また、
print(os.path.isdir(fol_dire))
のコードで存在を確認するのですが
False
の出力があり、存在していないはずなのですが、上記のエラーメッセージがでてしまいます。

該当のソースコード

Python

1import os 2import dicom 3from select_file import main as dl 4 5def main(): 6 org_files = dl() 7 8 for i in range(len(org_files)): 9 list_files = org_files[i] 10 11 di_img = dicom.read_file(list_files) 12 13 im_date = di_img.AcquisitionDate 14 im_no = di_img.InstanceNumber 15 16 index = list_files.rfind('/') 17 fol_dir = list_files[:index + 1] + im_date 18 print(fol_dir) 19 print(os.path.isdir(fol_dir)) 20 if os.path.isdir(fol_dir) == False : 21 os.mkdir(im_date) 22 print(os.path.isdir(fol_dir)) 23 24 #ファイル名の変更 25 new_filename = list_files[:index + 1] + '/' + str(im_date) +'_' + str(im_no) 26 os.rename(list_files, new_filename) 27 28if __name__ == '__main__': 29 main() 30 31 32#以下select_file.py 33# -*- coding: utf-8 -*- 34 35import tkinter 36from tkinter import messagebox as tkMessageBox 37from tkinter import filedialog as tkFileDialog 38 39def main(): 40 root=tkinter.Tk() 41 root.withdraw() 42 43 fTyp=[('','*')] 44 45 iDir='C:/Desktop' 46 47 filenames = tkFileDialog.askopenfilenames(filetypes=fTyp, initialdir=iDir) 48 return filenames 49

試したこと

途中に
print(fol_dir)
のコマンドでpathを表示させ、存在を確認するのですがそのフォルダは存在せず
上位階層にはきちんとアクセス可能です。

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

OS Windows10
python 3.6.1 Anaconda custom 64-bit
dicom 0.9.9.post1

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

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

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

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

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

umyu

2018/09/15 13:24 編集

FileExistsErrorの例外だけではなく、それ以外のtracebackの行も質問文に追記してくださいな。
dendendenjirou

2018/09/15 13:30

追加・修正依頼ありがとうございます。ご指摘部分追加させていただきました。よろしくお願いいたします。
guest

回答1

0

ベストアンサー

追記ありがとうございました。

os.mkdir(im_date)
FileExistsError: [WinError 183] 既に存在するファイルを作成することはできません。: '20180807'

原因はos.mkdirより引用

os.mkdir(path, mode=0o777, *, dir_fd=None)(原文)
ディレクトリ path を数値モード mode で作成します。

すでにディレクトリが存在したら、 FileExistsError が上げられます。

フォルダの存在チェックが正しくないかと。

Python

1if os.path.isdir(fol_dir) == False : # 変数:fol_dirで判定しています。 2 os.mkdir(im_date) # 作っているフォルダの変数:im_date 3 print(os.path.isdir(fol_dir)) 4

存在チェックを修正する以外にも以下の対策案があります。

案1, os.mkdirsを使う。

Python

1os.makedirs(im_date, exist_ok=True)

案2, Pathlibを使う。(回答者お勧め方法)

Python

1from pathlib import Path 2 3def main(): 4 org_files = dl() 5 6 for i in range(len(org_files)): 7 # 中略 8 fol_dir = list_files[:index + 1] + im_date 9 10 image_dir = Path(im_date) 11 image.mkdir(parents=True, exist_ok=True) 12

参考:Pathlibチートシート

投稿2018/09/15 13:45

umyu

総合スコア5846

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

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

dendendenjirou

2018/09/15 14:00

フォルダの存在チェックが正しくないかと。 ご指摘ありがとうございます。 確かに、 im_date はpathとして成立していませんでした。 os.mkdir(im_date) ⇒ os.mkdir(fol_dir) とすることで問題が解消されました。 os.makedirs(im_date, exist_ok=True) pathlib のご教授ありがとうございます。 これから、それらも勉強させていただきます。 本当に、ありがとうございました。
umyu

2018/09/15 14:10

@dendendenjirouさんへ 問題解決できて良かったのですー。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問