답변:
Python에는 임시 파일 이름을 생성하는 기능이 있습니다 . http://docs.python.org/library/tempfile.html을 참조 하십시오 . 예를 들면 :
In [4]: import tempfile
를 호출 할 tempfile.NamedTemporaryFile()
때마다 다른 임시 파일이 생성되며 해당 이름은 .name
속성을 사용하여 액세스 할 수 있습니다 . 예 :
In [5]: tf = tempfile.NamedTemporaryFile()
In [6]: tf.name
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i'
In [7]: tf = tempfile.NamedTemporaryFile()
In [8]: tf.name
Out[8]: 'c:\\blabla\\locals~1\\temp\\tmpr8vvme'
고유 한 파일 이름이 있으면 일반 파일처럼 사용할 수 있습니다. 참고 : 기본적으로 파일 은 닫히면 삭제 됩니다. 그러나 delete
매개 변수가 False이면 파일이 자동으로 삭제되지 않습니다.
전체 매개 변수 세트 :
tempfile.NamedTemporaryFile([mode='w+b'[, bufsize=-1[, suffix=''[, prefix='tmp'[, dir=None[, delete=True]]]]]])
임시 파일의 접두사를 지정할 수도 있습니다 (파일 생성 중에 제공 할 수있는 다양한 매개 변수 중 하나로) :
In [9]: tf = tempfile.NamedTemporaryFile(prefix="zz")
In [10]: tf.name
Out[10]: 'c:\\blabla\\locals~1\\temp\\zzrc3pzk'
임의의 문자열을 생성하기 위해 UUID 모듈 을 사용할 수 있습니다 .
import uuid
filename = str(uuid.uuid4())
UUID 생성기가 중복 식별자 (이 경우 파일 이름)를 생성 할 가능성이 극히 낮 으므로 유효한 선택입니다 .
향후 100 년 동안 매초 10 억 UUID를 생성 한 후에야 하나의 복제본 만 생성 할 확률은 약 50 %가됩니다. 지구상의 모든 사람이 6 억 UUID를 소유하고 있다면 하나의 중복 가능성은 약 50 %가 될 것입니다.
uuid.uuid4().hex
대시 ( -
) 없이 16 진 문자열을 가져 오는 데 사용 합니다 .
일반적인 접근 방식은 파일과 시간적 관계를 갖도록 파일 이름에 접두사 / 접미사로 타임 스탬프를 추가하는 것입니다. 더 많은 고유성이 필요하면 여기에 임의의 문자열을 추가 할 수 있습니다.
import datetime
basename = "mylogfile"
suffix = datetime.datetime.now().strftime("%y%m%d_%H%M%S")
filename = "_".join([basename, suffix]) # e.g. 'mylogfile_120508_171442'
1. Test if file exists, 2. create file.
있을 수 있습니다. 다른 프로세스가 1 단계와 2 단계 사이에 사용자의 작업을 중단하고 파일을 생성하면 코드가 재개 될 때 다른 프로세스의 파일을 덮어 씁니다.
tempfile
이를 처리 하는 모듈을 사용할 수 있습니다. :)
...strftime("%y%m%d_%H%M%S%f")
임의의 파일 이름 을 생성하도록 요청 된 OP 아닌 임의의 파일 . 시간과 UUID가 충돌 할 수 있습니다. 단일 시스템 (공유 파일 시스템이 아님)에서 작업하고 프로세스 / 스레드가 자체적으로 작동하지 않는 경우 os.getpid ()를 사용하여 고유 한 PID를 얻고이를 고유 한 파일 이름의 요소로 사용하십시오. 다른 프로세스는 분명히 동일한 PID를 얻지 못할 것입니다. 다중 스레드 인 경우 스레드 ID를 가져옵니다. 단일 스레드 또는 프로세스가 여러 다른 임시 파일을 생성 할 수있는 코드의 다른 측면이있는 경우 다른 기술을 사용해야 할 수 있습니다. 롤링 인덱스가 작동 할 수 있습니다 (오래 유지하지 않거나 롤오버에 대해 걱정할 수있는 파일을 너무 많이 사용하지 않는 경우). 이 경우 전역 해시 / 인덱스를 "활성"파일로 유지하는 것으로 충분합니다.
장황한 설명에 대해 죄송하지만 정확한 사용법에 따라 다릅니다.
원래 파일 이름을 새 파일 이름의 일부로 유지하려면 현재 시간의 MD5 해시를 사용하여 균일 한 길이의 고유 한 접두사를 생성 할 수 있습니다.
from hashlib import md5
from time import localtime
def add_prefix(filename):
prefix = md5(str(localtime()).encode('utf-8')).hexdigest()
return f"{prefix}_{filename}"
add_prefix ( 'style.css')를 호출하면 다음과 같은 시퀀스가 생성됩니다.
a38ff35794ae366e442a0606e67035ba_style.css
7a5f8289323b0ebfdbc7c840ad3cb67b_style.css
나는 개인적으로 내 텍스트를 무작위 / 고유 할뿐만 아니라 아름답게하는 것을 선호하기 때문에 정수에서 멋지게 보이는 무작위 텍스트를 생성하는 hashids lib를 좋아합니다. 통해 설치할 수 있습니다
pip install hashids
단편:
import hashids
hashids = hashids.Hashids(salt="this is my salt", )
print hashids.encode(1, 2, 3)
>>> laHquq
간단한 설명:
Hashids는 숫자에서 짧고 고유 한 비 순차적 ID를 생성하는 작은 오픈 소스 라이브러리입니다.
import uuid
imageName = '{}{:-%Y%m%d%H%M%S}.jpeg'.format(str(uuid.uuid4().hex), datetime.now())
무작위 패키지를 사용할 수 있습니다.
import random
file = random.random()