ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python/날짜와 시간으로 사진 이름 변경 - 2. 임시 이름 변경
    코딩/Python 2024. 1. 18. 17:13
    728x90

    매개변수

    1. path (str): 파일이 존재하는 디렉토리의 경로.
    2. files (list[str]): 파일 이름들을 담고 있는 리스트.
    3. csv_name (str): CSV 파일의 이름. 변경된 파일 목록 및 각 파일의 원래 경로와 임시 경로를 저장.
    4. prefix_tmp (str): 임시 파일 이름의 접두어.

    설명

    특정 디렉토리에서 파일 이름을 임시로 변경하고, 변경된 파일 목록을 CSV 파일에 저장하는 기능을 수행.

    1. 파일 수에 따른 자릿수 지정:
      • file_count = len(files): 주어진 디렉토리에서 가져온 파일의 수를 계산.
      • zfill_number = len(str(file_count)): 파일 수에 따라 필요한 자릿수를 계산.
    2. 파일 이름 임시로 변경:
      • tmp_files와 csv_rows 리스트 초기화 후 각 파일에 대해 루프를 돌면서 다음 작업을 수행:
        • for file in files: 를 쓰지 않고 enumerate()를 사용한 이유는 index i 를 파일명으로 사용하기 위해서다. 
        • 파일의 이름이 이미 임시 파일 접두어(prefix_tmp)로 시작하는지 확인하고, 이미 임시 파일이라면 오류 메시지를 출력하고 프로그램을 종료.
        • 파일의 확장자를 추출하고 현재 파일의 경로를 생성.
        • 새로운 임시 파일 이름을 생성하고, 새로운 임시 파일의 경로를 생성.
        • 임시 파일의 이름과 경로를 tmp_files 리스트에 추가.
        • 현재 파일의 경로와 임시 파일의 경로를 각각 CSV 행으로 만들어 csv_rows 리스트에 추가.
        • os.rename()을 사용하여 현재 파일의 이름을 임시 파일의 이름으로 변경.
    3. CSV 파일에 변경 내용 저장:
      • 모든 파일의 이름이 변경된 후, 변경된 파일 목록과 원래 파일의 경로, 임시 파일의 경로를 갖는 CSV 행들을 CSV 파일에 저장.
      • CSV 파일은 추후 실수가 있었을 경우 파일 이름을 원래로 되돌리려는 목적으로 저장.
    4. 임시로 변경된 파일 목록 반환:
      • 변경된 파일 목록을 담고 있는 tmp_files 리스트를 반환.
    728x90
    def rename_tmp(path: str, files: list[str], csv_name: str, prefix_tmp: str) \
    	-> list[str]:
        '''
        파일 이름 임시 변경
        '''
        # 파일 수에 맞게 자릿수 지정
        file_count = len(files)
        zfill_number = len(str(file_count))
        
        ### 파일의 이름을 임시로 변경
        tmp_files = []
        csv_rows = []
        for i, file in enumerate(files):
            # tmp already check
            if file.startswith(prefix_tmp):
                print('Error. TMP files')
                exit()
                
            _, extension = os.path.splitext(file)
            file_path = os.path.join(path, file)
            
            tmp_file = prefix_tmp + str(i).zfill(zfill_number) + extension
            tmp_file_path = os.path.join(path, tmp_file)
            tmp_files.append(tmp_file)
            
            row = [file_path, tmp_file_path]
            csv_rows.append(row)
            
            os.rename(file_path, tmp_file_path)
        
        # 이름 변경 내용 csv 저장
        file_path_csv = os.path.join(path, csv_name)
        with open(file_path_csv, 'w', newline='', encoding='utf-8-sig') as csv_file:
            csv_writer = csv.writer(csv_file)
            csv_writer.writerows(csv_rows)
        
        return tmp_files

     

    728x90

    댓글

Designed by Tistory.