프로그래밍/Python
[python] 랜덤 6자리 문자열을 생성하고, 중복되지 않도록 파일명을 지정한 후 이미지 캡차를 저장. captcha
홍반장水_
2024. 9. 25. 13:41
반응형
[python] 랜덤 6자리 문자열을 생성하고, 중복되지 않도록 파일명을 지정한 후 이미지 캡차를 저장. captcha
import random
import string
import os
from captcha.image import ImageCaptcha # ImageCaptcha 라이브러리를 사용해야 합니다.
# 랜덤 6자리 문자열 생성 함수
def generate_random_string(length=6):
characters = string.ascii_letters + string.digits # 영문 대소문자 + 숫자
return ''.join(random.choices(characters, k=length))
# 중복되지 않는 파일명 생성 함수
def get_unique_filename(base_name, extension, directory="./img/"):
counter = 1
new_filename = f"{base_name}.{extension}"
# 경로 내 파일명이 중복되면 새로운 파일명 생성
while os.path.exists(os.path.join(directory, new_filename)):
new_filename = f"{base_name}_{counter}.{extension}"
counter += 1
return new_filename
# 메인 로직
def main():
# 캡차 이미지 생성기 설정
image = ImageCaptcha(width=280, height=90)
# 랜덤 6자리 문자열 생성
captcha_text = generate_random_string()
print(f"\n랜덤 6자리 문자열: {captcha_text}")
# 이미지 생성
data = image.generate(captcha_text)
# 이미지 저장 경로 지정
img_directory = "./img/"
os.makedirs(img_directory, exist_ok=True) # img 폴더가 없을 경우 생성
# 중복되지 않는 파일명 생성
unique_filename = get_unique_filename(captcha_text, 'png', directory=img_directory)
# 이미지 파일 저장
image.write(captcha_text, os.path.join(img_directory, unique_filename))
print(f"이미지가 {unique_filename}으로 저장되었습니다.")
# 프로그램 실행
if __name__ == "__main__":
main()
수정 내용:
- generate_random_string() 함수: 랜덤한 6자리 문자열을 생성합니다.
- get_unique_filename() 함수: 파일명 중복을 방지하기 위해, 기존에 존재하는 파일이 있을 경우 숫자를 추가하여 고유 파일명을 생성합니다.
- 폴더 생성 (os.makedirs()): 이미지 저장 경로(./img/)가 존재하지 않으면 자동으로 폴더를 생성하도록 os.makedirs()를 사용합니다.
- os.path.exists(): 파일이 존재하는지 확인하고 중복 파일명을 방지합니다.
- 경로 및 파일명 결합 (os.path.join()): OS에 관계없이 적절한 경로를 결합하기 위해 os.path.join()을 사용합니다.
실행 결과:
- ./img/ 폴더에 랜덤한 문자열을 포함한 이미지가 저장됩니다.
- 파일명이 중복되면 자동으로 _1, _2 등의 숫자가 추가됩니다.
반응형