PR

【Python】ディレクトリ内のファイルをランダムに抽出してコピーする

Python
記事内に広告が含まれています。

本記事では、Pythonを使ってディレクトリ内にある複数のファイルからランダムに抽出して別のディレクトリにコピーする方法を解説します。

機械学習、AIをやっていると全体の何%かを抽出してきてデータの確認をすることがちょこちょこあったので、Pythonでランダムに抽出するコードを作ってみました。

実行環境

Python 3.8.3

Windows10 Home

ディレクトリ構成

Pythonというディレクトリの下にinディレクトリ内にある複数のファイルからランダムに抽出して別のディレクトリにコピーするrandom_sample.pyというファイルがあります。

out/choiceディレクトリがinディレクトリからランダムに抽出されたファイルをコピーする先のディレクトリです。

Python
│ random_sample.py

├─in
│   1.txt
│   2.txt
│   3.txt
│   4.txt
│   5.txt
│   6.txt
│   7.txt
│   8.txt
│   9.txt
│   10.txt
└─out
  └─choices

ディレクトリ内にある複数のファイルからランダムに抽出して別のディレクトリにコピーするコード

SAMPLING_RATIOを調整することで抽出するファイル数を変更することができます。

今回は全ファイル数の30%を抽出するように設定しています。

ファイル数が10個なので、ランダムに3個抽出されます。

拡張子も今回は.txtでやっていますが、jpg、csvに変えるなどすればいろいろなファイルを対象に使うことができます。

import glob
import random
import os 
import shutil
import math

INPUT_DIR = 'in'
OUTPUT_DIR = 'out'
#ランダムで抽出する割合
SAMPLING_RATIO = 0.3

def random_sample_file():
    files = glob.glob(INPUT_DIR + '/*.txt')

    random_sample_file = random.sample(files,math.ceil(len(files)*SAMPLING_RATIO))
    os.makedirs(OUTPUT_DIR + "/choices",exist_ok=True)

    for file in random_sample_file:
        shutil.copy2(file,OUTPUT_DIR + "/choices/")

if __name__ == '__main__':
    random_sample_file()

実行結果

10個の中から3つのファイルをランダムに抽出することができました。

Python
│ random_sample.py

├─in
│   1.txt
│   2.txt
│   3.txt
│   4.txt
│   5.txt
│   6.txt
│   7.txt
│   8.txt
│   9.txt
│   10.txt
└─out
  └─choices
     2.txt
     5.txt
     8.txt

おすすめのPython学習本はゲームを作りながら楽しく学べるPythonプログラミング です。

ゲーム作りながらPythonを楽しく学べるので、挫折しにくいです。

コメント