init
This commit is contained in:
241
format_lại_đataset.ipynb
Normal file
241
format_lại_đataset.ipynb
Normal file
@@ -0,0 +1,241 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"id": "415c3125-320a-4164-a9ad-4007ac750ff9",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"📂 Đang thực hiện sắp xếp tại: /home/jovyan/cloud_train/dataset\n",
|
||||
"➕ Đã tạo folder mẹ: ROIs1158_spring\n",
|
||||
" ➡ Di chuyển: ROIs1158_spring_s1 -> ROIs1158_spring/s1\n",
|
||||
" ➡ Di chuyển: ROIs1158_spring_s2 -> ROIs1158_spring/s2\n",
|
||||
" ➡ Di chuyển: ROIs1158_spring_s2_cloudy -> ROIs1158_spring/s2_cloudy\n",
|
||||
"➕ Đã tạo folder mẹ: ROIs1868_summer\n",
|
||||
" ➡ Di chuyển: ROIs1868_summer_s1 -> ROIs1868_summer/s1\n",
|
||||
" ➡ Di chuyển: ROIs1868_summer_s2 -> ROIs1868_summer/s2\n",
|
||||
" ➡ Di chuyển: ROIs1868_summer_s2_cloudy -> ROIs1868_summer/s2_cloudy\n",
|
||||
"➕ Đã tạo folder mẹ: ROIs1970_fall\n",
|
||||
" ➡ Di chuyển: ROIs1970_fall_s1 -> ROIs1970_fall/s1\n",
|
||||
" ➡ Di chuyển: ROIs1970_fall_s2 -> ROIs1970_fall/s2\n",
|
||||
" ➡ Di chuyển: ROIs1970_fall_s2_cloudy -> ROIs1970_fall/s2_cloudy\n",
|
||||
"➕ Đã tạo folder mẹ: ROIs2017_winter\n",
|
||||
" ➡ Di chuyển: ROIs2017_winter_s1 -> ROIs2017_winter/s1\n",
|
||||
" ➡ Di chuyển: ROIs2017_winter_s2 -> ROIs2017_winter/s2\n",
|
||||
" ➡ Di chuyển: ROIs2017_winter_s2_cloudy -> ROIs2017_winter/s2_cloudy\n",
|
||||
"\n",
|
||||
"✅ ĐÃ XONG! Đã di chuyển 12 thư mục.\n",
|
||||
"👉 Bây giờ hãy chạy lại Cell load dữ liệu (Train code), nó sẽ hoạt động.\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import shutil\n",
|
||||
"\n",
|
||||
"# ==========================================\n",
|
||||
"# SCRIPT SẮP XẾP LẠI THƯ MỤC (CHẠY 1 LẦN)\n",
|
||||
"# ==========================================\n",
|
||||
"\n",
|
||||
"# 1. Xác định đường dẫn gốc\n",
|
||||
"user_home = os.path.expanduser(\"~\")\n",
|
||||
"base_dir = os.path.join(user_home, \"cloud_train\", \"dataset\")\n",
|
||||
"print(f\"📂 Đang thực hiện sắp xếp tại: {base_dir}\")\n",
|
||||
"\n",
|
||||
"if not os.path.exists(base_dir):\n",
|
||||
" print(\"❌ Lỗi: Không tìm thấy thư mục dataset!\")\n",
|
||||
"else:\n",
|
||||
" # 2. Định nghĩa cấu trúc chuẩn cần gom\n",
|
||||
" # Key = Tên thư mục mẹ (Mới)\n",
|
||||
" # Value = Danh sách các thư mục con (Cũ - đang nằm lẻ)\n",
|
||||
" seasons_map = {\n",
|
||||
" \"ROIs1158_spring\": [\"ROIs1158_spring_s1\", \"ROIs1158_spring_s2\", \"ROIs1158_spring_s2_cloudy\"],\n",
|
||||
" \"ROIs1868_summer\": [\"ROIs1868_summer_s1\", \"ROIs1868_summer_s2\", \"ROIs1868_summer_s2_cloudy\"],\n",
|
||||
" \"ROIs1970_fall\": [\"ROIs1970_fall_s1\", \"ROIs1970_fall_s2\", \"ROIs1970_fall_s2_cloudy\"],\n",
|
||||
" \"ROIs2017_winter\": [\"ROIs2017_winter_s1\", \"ROIs2017_winter_s2\", \"ROIs2017_winter_s2_cloudy\"]\n",
|
||||
" }\n",
|
||||
"\n",
|
||||
" count_moved = 0\n",
|
||||
" \n",
|
||||
" for target_season, sub_folders in seasons_map.items():\n",
|
||||
" # Tạo thư mục mẹ (ví dụ: ROIs1158_spring)\n",
|
||||
" target_path = os.path.join(base_dir, target_season)\n",
|
||||
" if not os.path.exists(target_path):\n",
|
||||
" os.makedirs(target_path)\n",
|
||||
" print(f\"➕ Đã tạo folder mẹ: {target_season}\")\n",
|
||||
" \n",
|
||||
" for sub in sub_folders:\n",
|
||||
" source_path = os.path.join(base_dir, sub) # Đường dẫn thư mục lẻ hiện tại\n",
|
||||
" \n",
|
||||
" # Nếu thư mục lẻ tồn tại, di chuyển nội dung của nó vào thư mục mẹ\n",
|
||||
" if os.path.exists(source_path):\n",
|
||||
" # Đổi tên thư mục lẻ cho đúng chuẩn (bỏ prefix mùa đi)\n",
|
||||
" # Ví dụ: ROIs1158_spring_s1 -> s1\n",
|
||||
" \n",
|
||||
" new_folder_name = \"\"\n",
|
||||
" if \"_s1\" in sub: new_folder_name = \"s1\"\n",
|
||||
" elif \"_s2_cloudy\" in sub: new_folder_name = \"s2_cloudy\"\n",
|
||||
" elif \"_s2\" in sub: new_folder_name = \"s2\"\n",
|
||||
" \n",
|
||||
" final_dest = os.path.join(target_path, new_folder_name)\n",
|
||||
" \n",
|
||||
" print(f\" ➡ Di chuyển: {sub} -> {target_season}/{new_folder_name}\")\n",
|
||||
" \n",
|
||||
" try:\n",
|
||||
" # Nếu đích chưa có thì move thẳng folder sang và đổi tên\n",
|
||||
" if not os.path.exists(final_dest):\n",
|
||||
" shutil.move(source_path, final_dest)\n",
|
||||
" count_moved += 1\n",
|
||||
" else:\n",
|
||||
" print(f\" ⚠️ Thư mục {new_folder_name} đã tồn tại trong {target_season}, bỏ qua.\")\n",
|
||||
" except Exception as e:\n",
|
||||
" print(f\" ❌ Lỗi: {e}\")\n",
|
||||
" else:\n",
|
||||
" # Kiểm tra xem nó đã nằm đúng chỗ chưa\n",
|
||||
" check_path = os.path.join(target_path, sub.split(\"_\")[-1].replace(\"cloudy\", \"s2_cloudy\") if \"cloudy\" in sub else sub.split(\"_\")[-1])\n",
|
||||
" # Logic check đơn giản\n",
|
||||
" pass\n",
|
||||
"\n",
|
||||
" if count_moved > 0:\n",
|
||||
" print(f\"\\n✅ ĐÃ XONG! Đã di chuyển {count_moved} thư mục.\")\n",
|
||||
" print(\"👉 Bây giờ hãy chạy lại Cell load dữ liệu (Train code), nó sẽ hoạt động.\")\n",
|
||||
" else:\n",
|
||||
" print(\"\\nℹ️ Không có gì thay đổi. Có thể cấu trúc đã đúng hoặc tên file không khớp.\")\n",
|
||||
" print(\"Hãy kiểm tra thủ công bằng lệnh: !ls -F /home/jovyan/cloud_train/dataset/\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"id": "0b006b3f-54f9-46d2-87a6-c4ee00f7b1e4",
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"📂 Đang xử lý tại: /home/jovyan/cloud_train/dataset\n",
|
||||
"🔍 Đang quét mùa: ROIs1158_spring\n",
|
||||
" found nested folder: s1 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s1\n",
|
||||
" found nested folder: s2 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2\n",
|
||||
" found nested folder: s2_cloudy -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2_cloudy\n",
|
||||
"🔍 Đang quét mùa: ROIs1868_summer\n",
|
||||
" found nested folder: s1 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s1\n",
|
||||
" found nested folder: s2 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2\n",
|
||||
" found nested folder: s2_cloudy -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2_cloudy\n",
|
||||
"🔍 Đang quét mùa: ROIs1970_fall\n",
|
||||
" found nested folder: s1 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s1\n",
|
||||
" found nested folder: s2 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2\n",
|
||||
" found nested folder: s2_cloudy -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2_cloudy\n",
|
||||
"🔍 Đang quét mùa: ROIs2017_winter\n",
|
||||
" found nested folder: s1 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s1\n",
|
||||
" found nested folder: s2 -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2\n",
|
||||
" found nested folder: s2_cloudy -> Đang di chuyển nội dung ra ngoài...\n",
|
||||
" ✅ Đã xóa folder rỗng: s2_cloudy\n",
|
||||
"\n",
|
||||
"✅ ĐÃ SỬA XONG CẤU TRÚC!\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"import os\n",
|
||||
"import shutil\n",
|
||||
"\n",
|
||||
"# ==========================================\n",
|
||||
"# FIX CẤU TRÚC PHASE 2: ĐƯA THƯ MỤC CON RA NGOÀI\n",
|
||||
"# ==========================================\n",
|
||||
"\n",
|
||||
"user_home = os.path.expanduser(\"~\")\n",
|
||||
"base_dir = os.path.join(user_home, \"cloud_train\", \"dataset\")\n",
|
||||
"print(f\"📂 Đang xử lý tại: {base_dir}\")\n",
|
||||
"\n",
|
||||
"seasons = [\n",
|
||||
" \"ROIs1158_spring\", \n",
|
||||
" \"ROIs1868_summer\", \n",
|
||||
" \"ROIs1970_fall\", \n",
|
||||
" \"ROIs2017_winter\"\n",
|
||||
"]\n",
|
||||
"\n",
|
||||
"# Các folder trung gian cần loại bỏ\n",
|
||||
"sub_types = [\"s1\", \"s2\", \"s2_cloudy\"]\n",
|
||||
"\n",
|
||||
"for season in seasons:\n",
|
||||
" season_path = os.path.join(base_dir, season)\n",
|
||||
" if not os.path.exists(season_path):\n",
|
||||
" continue\n",
|
||||
" \n",
|
||||
" print(f\"🔍 Đang quét mùa: {season}\")\n",
|
||||
" \n",
|
||||
" for sub in sub_types:\n",
|
||||
" # Đường dẫn tới folder trung gian (ví dụ: ROIs1158_spring/s1)\n",
|
||||
" nested_path = os.path.join(season_path, sub)\n",
|
||||
" \n",
|
||||
" if os.path.exists(nested_path):\n",
|
||||
" print(f\" found nested folder: {sub} -> Đang di chuyển nội dung ra ngoài...\")\n",
|
||||
" \n",
|
||||
" # Lấy danh sách các scene bên trong (s1_1, s1_2...)\n",
|
||||
" scenes = os.listdir(nested_path)\n",
|
||||
" for scene in scenes:\n",
|
||||
" src = os.path.join(nested_path, scene)\n",
|
||||
" dst = os.path.join(season_path, scene)\n",
|
||||
" \n",
|
||||
" # Di chuyển ra folder mẹ\n",
|
||||
" if not os.path.exists(dst):\n",
|
||||
" shutil.move(src, dst)\n",
|
||||
" \n",
|
||||
" # Sau khi chuyển hết thì xóa folder rỗng đi\n",
|
||||
" try:\n",
|
||||
" os.rmdir(nested_path)\n",
|
||||
" print(f\" ✅ Đã xóa folder rỗng: {sub}\")\n",
|
||||
" except OSError:\n",
|
||||
" print(f\" ⚠️ Không xóa được {sub} (có thể còn file rác)\")\n",
|
||||
"\n",
|
||||
"print(\"\\n✅ ĐÃ SỬA XONG CẤU TRÚC!\")"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"id": "e6151206-f103-451c-a572-029a4da25816",
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": []
|
||||
}
|
||||
],
|
||||
"metadata": {
|
||||
"kernelspec": {
|
||||
"display_name": "Python 3 (ipykernel)",
|
||||
"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.12.3"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 5
|
||||
}
|
||||
Reference in New Issue
Block a user