{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 引入os庫\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 創建標籤文件\n",
    "#\n",
    "#  預期的樹狀目錄圖\n",
    "#  .\n",
    "#  |-- README\n",
    "#  |-- s1\n",
    "#  |   |-- 1.pgm\n",
    "#  |   |-- ...\n",
    "#  |   |-- 10.pgm\n",
    "#  |-- s2\n",
    "#  |   |-- 1.pgm\n",
    "#  |   |-- ...\n",
    "#  |   |-- 10.pgm\n",
    "#  ...\n",
    "#  |-- s40\n",
    "#  |   |-- 1.pgm\n",
    "#  |   |-- ...\n",
    "#  |   |-- 10.pgm\n",
    "#\n",
    "def createLabelFile(root_path, separator):\n",
    "    \n",
    "    try:\n",
    "        # 標籤文件位置路徑\n",
    "        label_path= \"%s/label.txt\" % (root_path)\n",
    "\n",
    "        # 宣告標籤\n",
    "        label = 0\n",
    "\n",
    "        '''\n",
    "        打開一個文件用於寫入，\n",
    "        後面w代表是: 如果該文件已存在則打開文件，並從開頭開始編輯，\n",
    "        即原有內容會被刪除，反之則創建新文件\n",
    "        '''\n",
    "        fh = open(label_path,'w')\n",
    "\n",
    "        # 遞迴列出所有子目錄與檔案，並將檔案路徑以及分隔符號、標籤寫入文件\n",
    "        for root, dirs, files in os.walk(root_path):\n",
    "            for dir in dirs:\n",
    "                # 當前目錄\n",
    "                current_dir_path = \"%s/%s\" % (root, dir)\n",
    "\n",
    "                # 當前檔案\n",
    "                for file in os.listdir(current_dir_path):\n",
    "\n",
    "                    # 檔案路徑\n",
    "                    file_path = \"%s/%s\" % (current_dir_path, file)\n",
    "                    print (\"%s%s%d\" % (file_path, separator, label))\n",
    "\n",
    "                    # 寫入檔案\n",
    "                    fh.write(file_path)\n",
    "                    fh.write(separator)\n",
    "                    fh.write(str(label))\n",
    "                    fh.write(\"\\n\")   \n",
    "\n",
    "                # 每當處理過一個目錄時，標籤值遞增\n",
    "                label = label + 1\n",
    "    except:\n",
    "        # sys.exc_info()[0] 就是用來取出except的錯誤訊息的方法\n",
    "        print(\"Unexpected error:\", sys.exc_info()[0])\n",
    "    else:\n",
    "        print('createLabelFile finish job!')\n",
    "    finally:\n",
    "        # 關閉文件資源\n",
    "        fh.close()         "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data/image/train/Obama/1.pgm;0\n",
      "data/image/train/Obama/10.pgm;0\n",
      "data/image/train/Obama/100.pgm;0\n",
      "data/image/train/Obama/101.pgm;0\n",
      "data/image/train/Obama/102.pgm;0\n",
      "data/image/train/Obama/103.pgm;0\n",
      "data/image/train/Obama/104.pgm;0\n",
      "data/image/train/Obama/105.pgm;0\n",
      "data/image/train/Obama/106.pgm;0\n",
      "data/image/train/Obama/107.pgm;0\n",
      "data/image/train/Obama/108.pgm;0\n",
      "data/image/train/Obama/109.pgm;0\n",
      "data/image/train/Obama/11.pgm;0\n",
      "data/image/train/Obama/110.pgm;0\n",
      "data/image/train/Obama/111.pgm;0\n",
      "data/image/train/Obama/112.pgm;0\n",
      "data/image/train/Obama/113.pgm;0\n",
      "data/image/train/Obama/114.pgm;0\n",
      "data/image/train/Obama/115.pgm;0\n",
      "data/image/train/Obama/116.pgm;0\n",
      "data/image/train/Obama/117.pgm;0\n",
      "data/image/train/Obama/118.pgm;0\n",
      "data/image/train/Obama/12.pgm;0\n",
      "data/image/train/Obama/13.pgm;0\n",
      "data/image/train/Obama/14.pgm;0\n",
      "data/image/train/Obama/15.pgm;0\n",
      "data/image/train/Obama/16.pgm;0\n",
      "data/image/train/Obama/17.pgm;0\n",
      "data/image/train/Obama/18.pgm;0\n",
      "data/image/train/Obama/19.pgm;0\n",
      "data/image/train/Obama/2.pgm;0\n",
      "data/image/train/Obama/20.pgm;0\n",
      "data/image/train/Obama/21.pgm;0\n",
      "data/image/train/Obama/22.pgm;0\n",
      "data/image/train/Obama/23.pgm;0\n",
      "data/image/train/Obama/24.pgm;0\n",
      "data/image/train/Obama/25.pgm;0\n",
      "data/image/train/Obama/26.pgm;0\n",
      "data/image/train/Obama/27.pgm;0\n",
      "data/image/train/Obama/28.pgm;0\n",
      "data/image/train/Obama/29.pgm;0\n",
      "data/image/train/Obama/3.pgm;0\n",
      "data/image/train/Obama/30.pgm;0\n",
      "data/image/train/Obama/31.pgm;0\n",
      "data/image/train/Obama/32.pgm;0\n",
      "data/image/train/Obama/33.pgm;0\n",
      "data/image/train/Obama/34.pgm;0\n",
      "data/image/train/Obama/35.pgm;0\n",
      "data/image/train/Obama/36.pgm;0\n",
      "data/image/train/Obama/37.pgm;0\n",
      "data/image/train/Obama/38.pgm;0\n",
      "data/image/train/Obama/39.pgm;0\n",
      "data/image/train/Obama/4.pgm;0\n",
      "data/image/train/Obama/40.pgm;0\n",
      "data/image/train/Obama/41.pgm;0\n",
      "data/image/train/Obama/42.pgm;0\n",
      "data/image/train/Obama/43.pgm;0\n",
      "data/image/train/Obama/44.pgm;0\n",
      "data/image/train/Obama/45.pgm;0\n",
      "data/image/train/Obama/46.pgm;0\n",
      "data/image/train/Obama/47.pgm;0\n",
      "data/image/train/Obama/48.pgm;0\n",
      "data/image/train/Obama/49.pgm;0\n",
      "data/image/train/Obama/5.pgm;0\n",
      "data/image/train/Obama/50.pgm;0\n",
      "data/image/train/Obama/51.pgm;0\n",
      "data/image/train/Obama/52.pgm;0\n",
      "data/image/train/Obama/53.pgm;0\n",
      "data/image/train/Obama/54.pgm;0\n",
      "data/image/train/Obama/55.pgm;0\n",
      "data/image/train/Obama/56.pgm;0\n",
      "data/image/train/Obama/57.pgm;0\n",
      "data/image/train/Obama/58.pgm;0\n",
      "data/image/train/Obama/59.pgm;0\n",
      "data/image/train/Obama/6.pgm;0\n",
      "data/image/train/Obama/60.pgm;0\n",
      "data/image/train/Obama/61.pgm;0\n",
      "data/image/train/Obama/62.pgm;0\n",
      "data/image/train/Obama/63.pgm;0\n",
      "data/image/train/Obama/64.pgm;0\n",
      "data/image/train/Obama/65.pgm;0\n",
      "data/image/train/Obama/66.pgm;0\n",
      "data/image/train/Obama/67.pgm;0\n",
      "data/image/train/Obama/68.pgm;0\n",
      "data/image/train/Obama/69.pgm;0\n",
      "data/image/train/Obama/7.pgm;0\n",
      "data/image/train/Obama/70.pgm;0\n",
      "data/image/train/Obama/71.pgm;0\n",
      "data/image/train/Obama/72.pgm;0\n",
      "data/image/train/Obama/73.pgm;0\n",
      "data/image/train/Obama/74.pgm;0\n",
      "data/image/train/Obama/75.pgm;0\n",
      "data/image/train/Obama/76.pgm;0\n",
      "data/image/train/Obama/77.pgm;0\n",
      "data/image/train/Obama/78.pgm;0\n",
      "data/image/train/Obama/79.pgm;0\n",
      "data/image/train/Obama/8.pgm;0\n",
      "data/image/train/Obama/80.pgm;0\n",
      "data/image/train/Obama/81.pgm;0\n",
      "data/image/train/Obama/82.pgm;0\n",
      "data/image/train/Obama/83.pgm;0\n",
      "data/image/train/Obama/84.pgm;0\n",
      "data/image/train/Obama/85.pgm;0\n",
      "data/image/train/Obama/86.pgm;0\n",
      "data/image/train/Obama/87.pgm;0\n",
      "data/image/train/Obama/88.pgm;0\n",
      "data/image/train/Obama/89.pgm;0\n",
      "data/image/train/Obama/9.pgm;0\n",
      "data/image/train/Obama/90.pgm;0\n",
      "data/image/train/Obama/91.pgm;0\n",
      "data/image/train/Obama/92.pgm;0\n",
      "data/image/train/Obama/93.pgm;0\n",
      "data/image/train/Obama/94.pgm;0\n",
      "data/image/train/Obama/95.pgm;0\n",
      "data/image/train/Obama/96.pgm;0\n",
      "data/image/train/Obama/97.pgm;0\n",
      "data/image/train/Obama/98.pgm;0\n",
      "data/image/train/Obama/99.pgm;0\n",
      "data/image/train/TZUYU/1.pgm;1\n",
      "data/image/train/TZUYU/10.pgm;1\n",
      "data/image/train/TZUYU/11.pgm;1\n",
      "data/image/train/TZUYU/12.pgm;1\n",
      "data/image/train/TZUYU/13.pgm;1\n",
      "data/image/train/TZUYU/14.pgm;1\n",
      "data/image/train/TZUYU/15.pgm;1\n",
      "data/image/train/TZUYU/16.pgm;1\n",
      "data/image/train/TZUYU/17.pgm;1\n",
      "data/image/train/TZUYU/18.pgm;1\n",
      "data/image/train/TZUYU/19.pgm;1\n",
      "data/image/train/TZUYU/2.pgm;1\n",
      "data/image/train/TZUYU/20.pgm;1\n",
      "data/image/train/TZUYU/21.pgm;1\n",
      "data/image/train/TZUYU/22.pgm;1\n",
      "data/image/train/TZUYU/23.pgm;1\n",
      "data/image/train/TZUYU/24.pgm;1\n",
      "data/image/train/TZUYU/25.pgm;1\n",
      "data/image/train/TZUYU/26.pgm;1\n",
      "data/image/train/TZUYU/27.pgm;1\n",
      "data/image/train/TZUYU/28.pgm;1\n",
      "data/image/train/TZUYU/29.pgm;1\n",
      "data/image/train/TZUYU/3.pgm;1\n",
      "data/image/train/TZUYU/30.pgm;1\n",
      "data/image/train/TZUYU/31.pgm;1\n",
      "data/image/train/TZUYU/32.pgm;1\n",
      "data/image/train/TZUYU/33.pgm;1\n",
      "data/image/train/TZUYU/34.pgm;1\n",
      "data/image/train/TZUYU/35.pgm;1\n",
      "data/image/train/TZUYU/36.pgm;1\n",
      "data/image/train/TZUYU/37.pgm;1\n",
      "data/image/train/TZUYU/38.pgm;1\n",
      "data/image/train/TZUYU/39.pgm;1\n",
      "data/image/train/TZUYU/4.pgm;1\n",
      "data/image/train/TZUYU/40.pgm;1\n",
      "data/image/train/TZUYU/41.pgm;1\n",
      "data/image/train/TZUYU/42.pgm;1\n",
      "data/image/train/TZUYU/43.pgm;1\n",
      "data/image/train/TZUYU/44.pgm;1\n",
      "data/image/train/TZUYU/45.pgm;1\n",
      "data/image/train/TZUYU/46.pgm;1\n",
      "data/image/train/TZUYU/47.pgm;1\n",
      "data/image/train/TZUYU/5.pgm;1\n",
      "data/image/train/TZUYU/6.pgm;1\n",
      "data/image/train/TZUYU/7.pgm;1\n",
      "data/image/train/TZUYU/8.pgm;1\n",
      "data/image/train/TZUYU/9.pgm;1\n",
      "createLabelFile finish job!\n"
     ]
    }
   ],
   "source": [
    "# 程式進入點\n",
    "if __name__ == '__main__':\n",
    "    \n",
    "    # 根目錄\n",
    "    root_path = 'data/image/train'\n",
    "    \n",
    "    # 分隔符號\n",
    "    separator = ';'\n",
    "    \n",
    "    createLabelFile(root_path, separator)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
