실용적인 알고리즘

[FM2024, 파이썬] Facegen 공통 사진 복사 및 이름 변경

hminor 2024. 4. 17. 12:22

구현 의도

  • 근래에 기초적인 알고리즘으로 기초를 다지면서 지내다보니
  • 포스팅에 대해 신경쓰고 있지 않았으며
  • 또 FM2024를 하다가 계속 찰흑 덩어리 애들이 보이면
  • 사진을 구해서 포토샵으로 누끼 딴걸
  • 인게임 내에서 사용중인 스킨으로 해당 캐릭터의 고유 ID로 파일 이름 변경 후
  • Facegen 프로그램을 실행과정을 거쳐서 해결했는데
  • 몇 개인지도 모르는 고유 캐릭터를 하나씩 변경하기 힘들고 귀찮아서
  • 우선 자주 보이는 2002061000부터 2002079999 까지 모두 같은 사진으로 
  • 복사 파일을 이름만 변경해서 생성하기 위해 
  • 파이썬을 활용한 실용적인 알고리즘을 작성

 

구현 과정

  • 우선 파이썬 외장 함수인 shutil을 사용
  • shutil이란 shell utilities의 줄인 말로
  • 파일 및 디렉토리 작업을 수행하는 데 사용되는 파이썬의 표준 라이브러리 모듈이며
  • 주로 파일의 복사, 이동, 이름 변경 등의 파일 작업을 수행으로 아래와 같이 사용이 가능.
import shutil # shell utilities

원본파일 = "origin.png"

shutil.copy(원본파일,"test.png") # 파일 복사

복사폴더 = "test/"
shutil.copy(원본파일,f"{복사폴더}test.png") # 특정 폴더에 복사

shutil.move(원본파일,복사폴더) # 파일 이동
  •  그리고 f 스트링 format을 사용하는걸 계속 잊어버려서 아래에 한 번 정리
# 실수의 경우
a = 1.12
print(f"{a:.4f}")

# 정수의 경우
a = 10
print(f"{a:04d}")
  •  이제 본격적인 FM2024 사진 생성하는 코드는 아래와 같이 작성되어 있으며
  • 사용하고 싶다면 하단에 첨부된 파일을 사용하거나 그대로 붙여넣어서 사용이 가능.
  • 주석을 붙여놨기에 확인이 쉬울지도 모르겠지만 도움이 되길 바라면서
import shutil

def copy_and_rename_file(original_file, new_folder, default_num, start_num, end_num, not_delete_files):
    # 파일을 end_num 만큼 복사하고 이름을 변경하는 함수
    for i in range(start_num,end_num+1):
        if i not in not_delete_files:
            destination = new_folder + f"r-{default_num}{i:05d}.png"  # 새로운 파일의 경로
            shutil.copyfile(original_file, destination)  # 파일 복사
            print(f"복사 완료: {destination}")
        else: print(f"{i}는 있는 사진")
    print("생성 완료")

# 순서 
# 1. 각각의 "" 안에 이미지 경로와 생성 파일 경로를 붙여 넣기
이미지 = r"" # 
생성_파일경로 = r"" 
original_file = (이미지 +"/").replace("\\","/")
new_folder = (생성_파일경로+"/").replace("\\","/")

# 2. 파일 공통 번호 입력
default_num = "20020" 

# 3. 기존 생성한 커스텀 파일에서 공통 번호를 제외한 나머지 번호 입력 
not_delete_files = {61815,61816,69184} 

# 4. 시작하고 싶은 번호와 마지막 파일 번호를 각각 입력
start_num = 61000
end_num = 79999

# 5. 함수 실행
copy_and_rename_file(original_file, new_folder, default_num, start_num, end_num, not_delete_files) # 함수 실행

 

  • import os도 사용하는 방식이 있는데 다음에 기회가 되면 사용해서 또 포스팅하겠습니다.