Python

Python) 파이썬 파일 목록을 CSV로 저장하기

로픽 2022. 1. 12. 18:50
300x250

파이썬 파일 목록을 CSV로 저장하기

 

이전 포스팅에 이어 GUI로 출력된 리스트를 엑셀(CSV)로 저장하는법을 작성하였습니다.

 

* 핵심 코드

 - pandas 패키지 설치 필요.

# list를 dataFrame으로 변환
transdata = pandas.DataFrame(file_list, columns=['파일명'])

# 추출 경로, index 제거, 인코딩 설정
transdata.to_csv('D:\\test\\dir_path.csv', index=False, encoding='utf-8-sig')

* GUI 소스 코드

import sys, pandas, os
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QAbstractItemView, QHeaderView, QTableWidgetItem, QVBoxLayout, QLineEdit, QLabel, QPushButton, QMessageBox
from PyQt5.QtGui import QIcon

class MyApp(QWidget):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('디렉토리 리스트 출력') #App Title
        self.setWindowIcon(QIcon('cloud.png')) #favicon

        # 위젯
        self.qline = QLineEdit(self)
        self.qtable = QTableWidget(self)
        qlabel = QLabel('출력할 경로를 입력하세요', self)
        qbtnList = QPushButton('List 출력', self)
        qbtnExcel = QPushButton('Excel 추출', self)
        
        # 클릭 이벤트
        qbtnList.clicked.connect(self.listRun_clicked)
        qbtnExcel.clicked.connect(self.excelRun_clicked)

        # BoxLayout 설정
        layout = QVBoxLayout()
        layout.addWidget(qlabel)
        layout.addWidget(self.qline)
        layout.addWidget(self.qtable)
        layout.addWidget(qbtnList)
        layout.addWidget(qbtnExcel)

        # App 전체 레이어 설정
        self.setLayout(layout)
        self.setGeometry(300, 100, 600, 400) #App size
        self.show()

    # 리스트 출력 이벤트
    def listRun_clicked(self):
        dir_path = self.qline.text()
        if not dir_path:
            QMessageBox.about(self, '디렉토리 리스트 출력', '경로를 입력하세요.')
        else:
            file_list = os.listdir(dir_path)
            file_list_count = file_list.__len__() #list 갯수

            self.qtable.setRowCount(file_list_count)
            self.qtable.setColumnCount(1)
            self.qtable.setEditTriggers(QAbstractItemView.NoEditTriggers)
            self.qtable.setHorizontalHeaderLabels(["Type", "Size", "Value"])
            self.qtable.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

            for i in range(file_list_count):
                self.qtable.setItem(i, 0, QTableWidgetItem(file_list[i].format()))

    # 리스트 엑셀 추출 이벤트
    def excelRun_clicked(self):
        dir_path = self.qline.text()
        if not dir_path:
            QMessageBox.about(self, '디렉토리 리스트 출력', '경로를 입력하세요.')
        else:
            home_dir = os.getenv('USERPROFILE')
            file_list = os.listdir(dir_path)
            transdata = pandas.DataFrame(file_list, columns=['파일명'])          # list를 dataFrame으로 변환
            transdata.to_csv(home_dir + '\\Downloads\\dir_list.csv', index=False, encoding='utf-8-sig')     # 추출 경로 및 인코딩 언어 설정
            QMessageBox.about(self, 'Excel 추출', '추출이 완료되었습니다.')

if __name__ == '__main__':
   app = QApplication(sys.argv)
   ex = MyApp()
   sys.exit(app.exec_())

* GUI 결과 화면

경로 입력 후 Excel 추출 이벤트 실행

 

생성된 CSV 파일

 

 


* 22.02.01 수정

  - 사용자 디렉토리 값을 가져오게 설정 변경.

#추가/변경된 부분
home_dir = os.getenv('USERPROFILE')
transdata.to_csv(home_dir + '\\Downloads\\dir_list.csv', index=False, encoding='utf-8-sig')

 

 

 

반응형