【Python】ランダムな名前でディレクトリやファイルを大量作成

もくじ

やりたいこと

需要があるか不明ですが、今回やりたいことは大量にフォルダを作成しつつ、そのフォルダにランダムな名前をつけるようにプログラムします。

さらに、新しく作ったフォルダに事前に用意したファイルを複数個コピーして格納し、それもファイル名をランダムに設定します。

サンプルで仮データを作りたいときなどに活用してもらえたら。

ディレクトリ構成

$ tree
.
├── image
│   └── IMG_0001.png
└── test.py

完成形

import os
import random, string
import shutil

for i in range(5):# フォルダ数
  n = 20 # ランダム文字数
  folder_name = ''.join(random.choices(string.ascii_letters + string.digits, k=n))
  folder_name = "DIR-%s" % (folder_name.upper())
  path = "./%s" % (folder_name)
  os.mkdir(path)

  file_list = []
  for j in range(3):# ファイル数
    file_name = ''.join(random.choices(string.ascii_letters + string.digits, k=n))
    file_name = "IMG-%s" % (file_name.upper())
    file_list.append(file_name)
    file_path = './%s/%s.png' % (folder_name, file_list[j])
    shutil.copy('./image/IMG_0001.png', file_path)

コメントアウトしている「フォルダ数」「ランダム文字数」「ファイル数」の数字部分を任意の数字に変えるだけで好きな量を作成できます。

実行

python3 test.py
$ tree
.
├── DIR-0MTIUVSCCDOR5SJDSWOK
│   ├── IMG-GQE2KCJJTMC4GVFC48KR.png
│   ├── IMG-VQI6MRSOZANKZO4ZVKY4.png
│   └── IMG-YL3ZRLMBPEI0JHMDENQR.png
├── DIR-3EXR8AQVKVFIJUQ1PURH
│   ├── IMG-AM8T3GTAVVMMGTKFXE0I.png
│   ├── IMG-DGA6PZGL8WUFRHWOIO7U.png
│   └── IMG-RWBXPCPX94AFMDHZDNOM.png
├── DIR-A7XMBNLW5HU00VVWWNLU
│   ├── IMG-J96J4OZSVHOHIOHZIWQZ.png
│   ├── IMG-JOE7V0CIUCIGBGTUYBQA.png
│   └── IMG-XIQ9BTBLTXIT0XOSW7N7.png
├── DIR-LESRDJESGH3JBF27T39T
│   ├── IMG-GVWKQ3BYV4XZUNCO2Z2H.png
│   ├── IMG-TVJDDPLRWIKOAJHOFYKO.png
│   └── IMG-ZRXQVG8GV7OTT1PWDUWV.png
├── DIR-VCVGGSTY9FU7YAXDLSWG
│   ├── IMG-7JPCSJNRZGTANFSWGUDG.png
│   ├── IMG-BHDCXLNTWOY5XDJSYYFY.png
│   └── IMG-DWIIRUUZHZQ2CGOZ8THH.png
├── image
│   └── IMG_0001.png
└── test.py

DIR-xxxxのフォルダに格納されているIMG-xxxxはすべてimage/IMG_0001.pngをコピーしただけの同じ画像で、upper()をはずせば大文字小文字混在の文字列で生成できます。

$ tree
.
├── DIR-5aiIyLCgcUJ8nAJlbLFY
│   ├── IMG-KlHz3FyxreBLZgMMQjaT.png
│   ├── IMG-jpMDSriyUZjVOJovKoo1.png
│   └── IMG-xBHDndK0lg0doIex4GO6.png
├── DIR-EKiyFoeHeK2wXv9PaNhB
│   ├── IMG-73QNEbAQXNr4yjHD104X.png
│   ├── IMG-FFaPoDX35KqHRb8cilwB.png
│   └── IMG-J8DxhjijsVdeysb9rhqs.png
├── DIR-RbajTyQwx1nrLGTwEa4U
│   ├── IMG-e8fEnAcwte943R6YQtwr.png
│   ├── IMG-fhNOed2B6XlsVQa2es7E.png
│   └── IMG-vyGQukB2UVsEQ7wtRj7f.png
├── DIR-TuQZUyolKsb7iuhFv5NF
│   ├── IMG-idDweVb4FZ11PtrIM4iG.png
│   ├── IMG-lRFEiajKUQlIWRLJrHHh.png
│   └── IMG-xWWcDe8wvEUPRu73GQp3.png
├── DIR-ht9lu93BXpIeOkwN4sM4
│   ├── IMG-AQZRSoPDMtjWfX6wRmoF.png
│   ├── IMG-DZyDJIW0onAYGVUtdXV5.png
│   └── IMG-kCMLNuGYRcshzhKzBibU.png
├── image
│   └── IMG_0001.png
└── test.py

参考URL

https://leben.mobi/blog/python_ramdom_password/python/