kone
소미소프트

소미소프트

요즘 애용하고있는 랜덤 파일 선택기

07/07/2025, 06:15:32
유틸
4217 views · 13 likes

이전 거처 멸망 전에 만든 방주가 감당이 안되서 gpt로 프로그램 짜봤는데 생각보다 유용한것 같아서 평소에 받은 은혜를 갚아보기 위해서 올려봄.

세줄요약 있음

실행하면 이런 화면이고, 여기서 방주 주소 추가랑 제거 가능함.


코드

import os
import random
import tkinter as tk
from tkinter import filedialog, messagebox, Listbox, Scrollbar, END, SINGLE
import subprocess
import json
import webbrowser
import re

CONFIG_FILE = "folder_config.json"
ARCHIVE_EXTENSIONS = ('.zip', '.7z', '.rar', '.egg')

class ArchiveFileSelectorApp:
    def __init__(self, root):
        self.root = root
        self.root.title("랜덤 압축 파일 선택기")
        self.folder_list = []

        # Load saved folders
        self.load_folder_list()

        # Frame for folder list and scrollbar
        list_frame = tk.Frame(root)
        list_frame.pack(padx=10, pady=10)

        self.folder_listbox = Listbox(list_frame, selectmode=SINGLE, width=60)
        self.folder_listbox.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)

        scrollbar = Scrollbar(list_frame, orient="vertical")
        scrollbar.config(command=self.folder_listbox.yview)
        scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
        self.folder_listbox.config(yscrollcommand=scrollbar.set)

        # Populate listbox
        for folder in self.folder_list:
            self.folder_listbox.insert(END, folder)

        # Frame for buttons
        button_frame = tk.Frame(root)
        button_frame.pack(padx=10, pady=10)

        self.add_button = tk.Button(button_frame, text="폴더 추가", command=self.add_folder)
        self.add_button.grid(row=0, column=0, padx=5)

        self.remove_button = tk.Button(button_frame, text="선택한 폴더 제거", command=self.remove_selected_folder)
        self.remove_button.grid(row=0, column=1, padx=5)

        self.open_button = tk.Button(button_frame, text="랜덤 압축 파일 열기", command=self.open_random_archive)
        self.open_button.grid(row=0, column=2, padx=5)

        # Save folders on close
        self.root.protocol("WM_DELETE_WINDOW", self.on_close)

    def add_folder(self):
        folder = filedialog.askdirectory(title="추가할 폴더 선택")
        if folder and folder not in self.folder_list:
            self.folder_list.append(folder)
            self.folder_listbox.insert(END, folder)

    def remove_selected_folder(self):
        selected = self.folder_listbox.curselection()
        if selected:
            index = selected[0]
            self.folder_listbox.delete(index)
            del self.folder_list[index]

    def open_random_archive(self):
        archive_files = []
        for folder in self.folder_list:
            for dirpath, _, filenames in os.walk(folder):
                for filename in filenames:
                    if filename.lower().endswith(ARCHIVE_EXTENSIONS):
                        full_path = os.path.abspath(os.path.join(dirpath, filename))
                        archive_files.append(full_path)

        if archive_files:
            selected_file = random.choice(archive_files)
            subprocess.run(f'explorer /select,"{selected_file}"', shell=True)

            # Check for RJ or VJ code in filename
            filename = os.path.basename(selected_file)
            match = re.search(r'(RJ|VJ)(\d+)', filename, re.IGNORECASE)
            if match:
                code = match.group(0).upper()
                prefix = code[:2]
                if prefix == 'RJ':
                    url = f'https://www.dlsite.com/maniax/work/=/product_id/{code}.html'
                elif prefix == 'VJ':
                    url = f'https://www.dlsite.com/pro/work/=/product_id/{code}.html'
                webbrowser.open(url)
        else:
            messagebox.showinfo("알림", "선택된 폴더들에서 압축 파일(.zip, .7z, .rar, .egg)을 찾을 수 없습니다.")

    def load_folder_list(self):
        if os.path.exists(CONFIG_FILE):
            try:
                with open(CONFIG_FILE, 'r', encoding='utf-8') as f:
                    self.folder_list = json.load(f)
            except Exception as e:
                print(f"폴더 목록 로드 실패: {e}")
                self.folder_list = []

    def save_folder_list(self):
        try:
            with open(CONFIG_FILE, 'w', encoding='utf-8') as f:
                json.dump(self.folder_list, f, ensure_ascii=False, indent=2)
        except Exception as e:
            print(f"폴더 목록 저장 실패: {e}")

    def on_close(self):
        self.save_folder_list()
        self.root.destroy()

# Run the app
if __name__ == "__main__":
    root = tk.Tk()
    app = ArchiveFileSelectorApp(root)
    root.mainloop()


기능

다중 폴더 선택 가능

지정 폴더 내의 하위 폴더에서도 압축파일 검색 가능

지금 .zip .7z .rar .egg 파일 검색 됨

파일명에 RJ나 VJ 있으면 컴터 기본 브라우저로 DL링크 열어줌


*코드 수정해서 쓸사람은 알아서 수정해 gpt 코딩 잘하더라


젤다

https://kio.ac/c/cwMCZA5AmJQ_b36cgd45Cb


세줄요약

  1. 방주 양이 감당이 안되서 랜덤 선택기 만듦

  2. 쓸사람 써라

  3. 복구 항상 고맙다

13
1 comment
Sign in to comment
07/07/25
이것도 링크 암호화해야 하는지 모르겠네
Sign in to comment
챔버겜도 스팀나오것지?
일반
guguki
05/27 794 0
언홀메 비굴의 에드 함정상자씬 질문
질문
ㅇㅇ
05/27 1080 0
유니슨코드 이거 전투는 노잼 인데...
일반
sinbiru
05/27 887 0
[복구요청] RJ293542 스노우 브랜디아 - fairy later
요청
jazzi1004
05/27 1378 1
비타퀘2 조이플 관련
정보
playerndb
05/27 849 1
리본 아일랜드 후기
일반
desk1519
05/27 1586 0
도촬이 메인인 야겜 추천좀
질문
mudeog802
05/27 1739 0
마나카 납치당하면 못빠져 나오나
질문
별하늘에걸린다리
05/27 1088 0
세인트 엘리스 인물 구도
정보
쩝냡
05/27 1444 2
욕망의 꼬리 재밌어서 해보는데
질문
ㅋㅋㅋㅃㅃ
05/27 1666 1
비월선행록 정기 관련 질문
질문
tax5768
05/27 1867 0
솔직히 동인 야겜 초대형 서클이나 작가가 만들어주면 땡큐이긴 한데
일반
annihilation
05/27 1417 1
[Dokuneko Noil]회사 송년회
동인
ㅇㅇ
05/27 6994 42
[Dokuneko Noil] 소라이 사키에게 나쁜 짓을 하는 이야기 【전편+후편】
동인
ㅇㅇ
05/27 5718 39
SAO 완결내고 빨리 마린 드가자
일반
인생좆망함
05/27 1399 0
(스포) 의술사 스토리 솔직히 그 정돈 아님;
일반
happy3
05/27 1473 1
전에 ao madousi 작가가 올렸던 쿠소가키물..
일반
핥는맛
05/27 888 0
イチゴ哀歌 12화까지 나왔길래 보려는데 남주랑 교미하는 씬 있어?
질문
kawineo
05/27 4566 0
흑전차야 3분기까지 한 달 남았구나
일반
라붕
05/27 1052 0
지금 보니 니트 키우기 일어판이랑 한글판 둘 다 있었구나;
질문
kawineo
05/27 839 0
던전앤브라이드 에러
질문
ruby1011
05/27 1340 0
요몽원 질문
질문
facial
05/27 1068 0
내 기준 3대 갓겜
일반
akha12
05/27 1926 2
엽빛나 영상도 올리려 했는데 이미 있군
일반
kawineo
05/27 1083 0
마나카 포즈 추가는 업나
질문
Ghost
05/27 1503 0
N.T.Resort에 오신 것을 환영합니다 게임 시스템 개요 & 스틸 장면 소개
정보
ㅇㅇ
05/27 3026 18
[답변완] 얘 누군지 알겠는 사람?
질문
VoTaeBe
05/27 1528 1
루프물 에로게 할만한거 있을까요?
질문
sunray
05/27 1085 0
SAONTR이나 새겨진 쾌감 같은 게임 추천 받을수 있을까요?
질문
sa5400
05/27 753 0
피카소 26년작
일반
마사지
05/27 1617 7