programing

Python: 고유한 파일 이름을 만드는 방법은 무엇입니까?

newstyles 2023. 8. 22. 22:00

Python: 고유한 파일 이름을 만드는 방법은 무엇입니까?

는 파일 업로드와 텍스트 영역 두 가지 옵션이 있는 파이썬 웹 양식을 가지고 있습니다.각각의 값을 가져와서 다른 명령줄 프로그램에 전달해야 합니다.파일 업로드 옵션으로 파일 이름을 쉽게 전달할 수 있지만 텍스트 영역의 값을 전달하는 방법을 잘 모르겠습니다.

제가 해야 할 일은 다음과 같습니다.

  1. 고유한 파일 이름 생성
  2. 작업 디렉토리에 해당 이름의 임시 파일 작성
  3. 텍스트 영역에서 임시 파일로 전달된 값 저장
  4. 내 파이썬 모듈 내부에서 명령줄 프로그램을 실행하고 임시 파일의 이름을 전달합니다.

고유한 파일 이름을 생성하는 방법을 잘 모르겠습니다.고유한 파일 이름을 생성하는 방법에 대한 팁을 줄 수 있는 사람이 있습니까?모든 알고리즘, 제안 및 코드 라인이 감사합니다.

걱정해 주셔서 감사합니다.

질문이 명확하지 않다고 생각했습니다만, 고유한 파일 이름만 있으면...

import uuid

unique_filename = str(uuid.uuid4())

파이썬에서 임시 파일을 만들고 싶다면 파이썬의 표준 라이브러리에 tempfile이라는 모듈이 있습니다.파일에서 작동하도록 다른 프로그램을 시작하려면 tempile.mkstemp()를 사용하여 파일을 만들고 os.fdopen()을 사용하여 mkstemp()가 제공하는 파일 설명자에 액세스합니다.

참고로 파이썬 프로그램에서 명령을 실행하고 있다고요?하위 프로세스 모듈을 거의 확실하게 사용해야 합니다.

따라서 다음과 같은 코드를 매우 즐겁게 작성할 수 있습니다.

import subprocess
import tempfile
import os

(fd, filename) = tempfile.mkstemp()
try:
    tfile = os.fdopen(fd, "w")
    tfile.write("Hello, world!\n")
    tfile.close()
    subprocess.Popen(["/bin/cat", filename]).wait()        
finally:
    os.remove(filename)

그것을 실행해 보면, 당신은 그것을 발견해야 합니다.cat명령은 완벽하게 잘 작동했지만, 임시 파일은 삭제되었습니다.finally블록. mkstemp()가 직접 반환하는 임시 파일을 삭제해야 합니다. 라이브러리에서는 언제 완료되었는지 알 수 없습니다!

(편집: Named라고 가정했습니다.TemporaryFile은 사용자가 원하는 작업을 정확히 수행했지만 그렇게 편리하지 않을 수 있습니다. 임시 파일 개체를 닫으면 파일이 즉시 삭제되고 닫히기 전에 다른 프로세스에서 파일을 열도록 하면 일부 플랫폼(특히 Windows)에서 작동하지 않습니다.죄송합니다. 제가 실패했습니다.)

uuid모듈이 좋은 선택일 것입니다. 저는 사용하는 것을 선호합니다.uuid.uuid4().hex대시가 없는 16진수 문자열을 반환하므로 임의 파일 이름으로 사용할 수 있습니다.

import uuid
filename = uuid.uuid4().hex

출력은 다음과 같아야 합니다.

>>> import uuid
>>> uuid.uuid()
UUID('20818854-3564-415c-9edc-9262fbb54c82')
>>> str(uuid.uuid4())
'f705a69a-8e98-442b-bd2e-9de010132dc4'
>>> uuid.uuid4().hex
'5ad02dfb08a04d889e3aa9545985e304'  # <-- this one

고유한 임시 파일이 필요하신가요?

import tempfile

f = tempfile.NamedTemporaryFile(mode='w+b', delete=False)

print f.name
f.close()

f가 열린 파일입니다.delete=False파일을 닫은 후 삭제하지 않음을 의미합니다.

해야 할 경우 사항인 " 파이을제야하해는경있다습사니이항선택우어일름"가.prefix=...그리고.suffix=...문자열을 사용하는 인수https://docs.python.org/3/library/tempfile.html 을 참조하십시오.

datetime 모듈을 사용할 수 있습니다.

import datetime
uniq_filename = str(datetime.datetime.now().date()) + '_' + str(datetime.datetime.now().time()).replace(':', '.')

중: 사용 입니다.replace많은 운영 체제에서 파일 이름에 콜론을 사용할 수 없기 때문입니다.

이상입니다. 매번 고유한 파일 이름을 제공합니다.

파일 이름으로 짧고 고유한 ID가 필요한 경우 시도합니다.shortuuidshortuuid는 소문자 및 대문자와 숫자를 사용하며 l, 1, I, O 및 0과 같은 유사한 모양의 문자를 제거합니다.

>>> import shortuuid
>>> shortuuid.uuid()
'Tw8VgM47kSS5iX2m8NExNa'
>>> len(ui)
22

와 비교하여

>>> import uuid
>>> unique_filename = str(uuid.uuid4())
>>> len(unique_filename)
36
>>> unique_filename
'2d303ad1-79a1-4c1a-81f3-beea761b5fdf'

저는 이 질문을 접했고, 비슷한 것을 찾고 있는 사람들을 위해 저의 해결책을 추가하겠습니다.제 접근 방식은 무작위로 파일 이름을 만드는 것이었습니다.ascii성격. 이 높을입니다.그것은 가능성이 높고 독특할 것입니다.

from random import sample
from string import digits, ascii_uppercase, ascii_lowercase
from tempfile import gettempdir
from os import path

def rand_fname(suffix, length=8):
    chars = ascii_lowercase + ascii_uppercase + digits

    fname = path.join(gettempdir(), 'tmp-'
                + ''.join(sample(chars, length)) + suffix)

    return fname if not path.exists(fname) \
                else rand_fname(suffix, length)

고유한 파일 경로가 있는 경우 해당 경로를 만들려면 임의 패키지를 사용하여 파일에 대한 새 문자열 이름을 생성합니다.동일한 내용에 대해서는 아래 코드를 참조할 수 있습니다.

import os
import random
import string

def getUniquePath(folder, filename):    
    path = os.path.join(folder, filename)
    while os.path.exists(path):
         path = path.split('.')[0] + ''.join(random.choice(string.ascii_lowercase) for i in range(10)) + '.' + path.split('.')[1]
    return path

이제 이 경로를 사용하여 파일을 만들 수 있습니다.

이 작업은 ufp.path 모듈의 고유한 기능을 사용하여 수행할 수 있습니다.

import ufp.path
ufp.path.unique('./test.ext')

현재 경로가 'test.ext' 파일.ufp.path.dll 함수가 '/test (d1).ext'를 반환합니다.

언급URL : https://stackoverflow.com/questions/2961509/python-how-to-create-a-unique-file-name