디시인사이드 갤러리

마이너 갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[free] 파일명이 (1)로 끝나는 파일만 찾아주는 프로그램

몬발켜갤로그로 이동합니다. 2024.12.24 17:36:24
조회 123 추천 1 댓글 0
														

저는 유튜브 동영상을 4K Vdideo Downloader 프로그램을 사용해서 다운로드합니다.

그런데 같은 동영상을 다운로드할 때가 종종 발생합니다.

이 때는 동영상 파일 이름에 '(1)'이 붙어서 저장됩니다.

예를 들어서, baby dance.mkv라는 파일과 baby dance (1).mkv 라는 파일이 됩니다.

(윈도 탐색기에서 같은 파일을 붙여 넣으면 '복사본'이라는 글자가 붙습니다.)

이렇게 중복된 파일을 찾아서 지우기 위해서 프로그램을 만들기로 했습니다.

chatGPT에게 코드를 작성해 주기를 요구했고, 오류가 나거나 디자인을 바꾸는 등의 작업을 했습니다.


아래 그림을 보시면 알겠지만,

사용자가 왼쪽 폴더 선택 버튼을 클릭하면 대화창이 하나 뜹니다.

선택된 폴더 안에 있는 파일들이 왼쪽 폴더 창에 표시됩니다.

사용자가 오른쪽 파일 검색 버튼을 클릭하면 작업이 시작되고 종료됩니다.

사용자는 오른쪽 폴더 창에서 파일을 선택하고, DEL 키를 눌러서 그 파일을 휴지통으로 보낼 수 있습니다.


29b9d52ae3db34a33eee98a518d60403f518a2fa2910e09e



아래는 그 코드입니다.


import os
from send2trash import send2trash
from PyQt5.QtWidgets import (
QApplication, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QListWidget, QFileDialog, QMessageBox
)
from PyQt5.QtGui import QFont
from PyQt5.QtCore import Qt, QTimer


class FileManagerApp(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("File Manager")
self.setGeometry(200, 200, 800, 400)

# 레이아웃 설정
self.main_layout = QVBoxLayout()
self.setLayout(self.main_layout)

# 버튼 레이아웃
self.button_layout = QHBoxLayout()
self.main_layout.addLayout(self.button_layout)

# 왼쪽 폴더 버튼
self.left_folder_btn = QPushButton("왼쪽 폴더 선택")
self.left_folder_btn.clicked.connect(self.select_left_folder)
self.button_layout.addWidget(self.left_folder_btn)

# 오른쪽 파일 버튼
self.right_file_btn = QPushButton("오른쪽 파일 검색")
self.right_file_btn.clicked.connect(self.start_search_files)
self.button_layout.addWidget(self.right_file_btn)

# 폴더 창 레이아웃
self.folder_layout = QHBoxLayout()
self.main_layout.addLayout(self.folder_layout)

# 왼쪽 폴더 창
self.left_list_widget = QListWidget()
self.left_list_widget.setFont(QFont("Arial", 12))
self.folder_layout.addWidget(self.left_list_widget)

# 오른쪽 폴더 창
self.right_list_widget = QListWidget()
self.right_list_widget.setFont(QFont("Arial", 12))
self.folder_layout.addWidget(self.right_list_widget)

# 현재 선택된 폴더 경로 및 오른쪽 파일 리스트
self.current_folder = None
self.right_files_list = [] # 오른쪽 폴더 창에 표시된 파일 리스트 저장

# 검색 상태
self.search_index = 0
self.search_files_list = []

def select_left_folder(self):
"""왼쪽 폴더 선택 및 파일 표시"""
# 오른쪽 폴더 창 초기화
self.right_list_widget.clear()
self.right_files_list = []

folder = QFileDialog.getExistingDirectory(self, "왼쪽 폴더 선택", "")
if folder:
self.current_folder = os.path.abspath(folder)
self.populate_left_list()

def populate_left_list(self):
"""왼쪽 리스트에 폴더의 모든 파일 표시"""
if not self.current_folder:
return

self.left_list_widget.clear()

try:
files = [
f for f in os.listdir(self.current_folder)
if os.path.isfile(os.path.join(self.current_folder, f))
]
if files:
self.left_list_widget.addItems(files)
else:
QMessageBox.information(self, "알림", "폴더에 파일이 없습니다.")
except Exception as e:
QMessageBox.critical(self, "오류", f"파일을 로드하는 중 오류가 발생했습니다: {e}")

def start_search_files(self):
"""파일 검색 시작"""
self.right_files_list = []
self.search_files_list = [self.left_list_widget.item(i).text() for i in range(self.left_list_widget.count())]

if not self.search_files_list:
QMessageBox.information(self, "알림", "왼쪽 리스트에 파일이 없습니다.")
return

# 진행 상태 표시를 위한 메시지 박스
self.progress_box = QMessageBox(self)
self.progress_box.setWindowTitle("파일 검색 진행 중")
self.progress_box.setStandardButtons(QMessageBox.NoButton)
self.progress_box.show()

# QTimer를 사용하여 비동기적으로 검색 작업 실행
self.timer = QTimer()
self.timer.timeout.connect(self.search_next_file)
self.timer.start(10) # 10ms 간격으로 작업 실행

def search_next_file(self):
"""다음 파일 검색"""
if self.search_index >= len(self.search_files_list):
# 검색 완료 처리
self.timer.stop()
self.progress_box.close()
self.progress_box.deleteLater() # 메시지 박스 강제 삭제
self.update_right_list_widget()
return

file_name = self.search_files_list[self.search_index]
self.search_index += 1

# 진행 상태 업데이트
self.progress_box.setText(f"{self.search_index}/{len(self.search_files_list)}")

if os.path.splitext(file_name)[0].endswith("(1)"):
self.right_files_list.append(file_name)

def update_right_list_widget(self):
"""오른쪽 리스트 창 갱신"""
self.right_list_widget.clear()
self.right_list_widget.addItems(self.right_files_list)

def keyPressEvent(self, event):
"""DEL 키로 오른쪽 리스트에서 파일 삭제"""
if event.key() == Qt.Key_Delete:
self.delete_selected_file()

def delete_selected_file(self):
"""오른쪽 리스트에서 선택한 파일 삭제"""
selected_item = self.right_list_widget.currentItem()
if not selected_item:
return # 선택된 파일이 없으면 종료

file_name = selected_item.text()
file_path = os.path.join(self.current_folder, file_name)
file_path = os.path.normpath(file_path)

# 파일 삭제
try:
send2trash(file_path)
except Exception as e:
QMessageBox.critical(self, "오류", f"파일 삭제 중 오류가 발생했습니다: {e}")
return

# 삭제된 파일을 리스트에서 제거하고 오른쪽 창 갱신
self.right_files_list.remove(file_name)
self.update_right_list_widget()


if __name__ == "__main__":
app = QApplication([])
window = FileManagerApp()
window.show()
app.exec_()


추천 비추천

1

고정닉 0

0

원본 첨부파일 1

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 현역으로 군대 안 간게 의아한 스타는? 운영자 25/06/30 - -
- AD 휴대폰 바꿀까? 특가 구매 찬스! 운영자 25/07/02 - -
1 공지 프로그램 소스 코드의 공유/수정/판매 [2] 몬발켜갤로그로 이동합니다. 24.12.24 280 2
20 fre 빨간 공 파란 공 랜덤으로 그리는 프로그램 몬발켜갤로그로 이동합니다. 05.15 20 0
19 fre textmovie -자막만 있는 동영상 [2] 몬발켜갤로그로 이동합니다. 04.10 24 0
18 fre novel 9을 또 수정했습니다 몬발켜갤로그로 이동합니다. 02.27 19 0
17 fre html 파일 분할 (장 나누기) 몬발켜갤로그로 이동합니다. 02.21 25 0
16 fre 제미나이 복붙 novel 9을 또 수정했습니다 몬발켜갤로그로 이동합니다. 02.13 40 0
15 fre 제미나이 Flash 2.0을 위한 코드를 수정하였습니다 [4] 몬발켜갤로그로 이동합니다. 02.06 50 0
14 fre 1206, flash 1.5를 위한 코드를 수정했습니다 몬발켜갤로그로 이동합니다. 02.01 23 0
13 fre 누락된 파일명 찾아내기 몬발켜갤로그로 이동합니다. 01.31 12 0
12 fre 순서가 뒤죽박죽인 html 파일 이름 바꾸기 코드 몬발켜갤로그로 이동합니다. 01.31 27 0
11 fre 순서가 뒤죽박죽인 html 파일들 해결하기 몬발켜갤로그로 이동합니다. 01.30 28 0
10 fre 1206, Flash 1.5를 위한 코드를 또 수정했습니다 몬발켜갤로그로 이동합니다. 01.28 24 0
9 fre 1206 복붙 코드를 수정하였습니다 몬발켜갤로그로 이동합니다. 01.17 23 0
8 fre 1206을 위한 복붙 [2] 몬발켜갤로그로 이동합니다. 01.13 81 0
7 일반 이런갤도 있네 프갤러(223.38) 01.10 17 0
6 일반 북스캔 코드에 관한 설명을 추가합니다 몬발켜갤로그로 이동합니다. 01.09 56 0
5 fre 북스캔 book scan 몬발켜갤로그로 이동합니다. 01.07 217 1
4 fre 검색어로 폴더와 그 하위 폴더 안의 파일을 찾아주는 프로그램 몬발켜갤로그로 이동합니다. 24.12.24 128 0
3 fre 검색어로 폴더 안의 파일을 찾아주는 프로그램 [2] 몬발켜갤로그로 이동합니다. 24.12.24 189 0
fre 파일명이 (1)로 끝나는 파일만 찾아주는 프로그램 몬발켜갤로그로 이동합니다. 24.12.24 123 1
뉴스 김연아, ♥고우림과 럽스타 시작…“지금껏 참아왔다” 분노한 이유는 디시트렌드 07.03
1
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2