Python에서 실제 파일을 생성하지 않고 임시 파일 이름 생성
stackoverflow 의 질문 번호 10501247 은 Python에서 임시 파일을 만드는 방법에 대한 답변을 제공합니다.
제 경우에는 임시 파일 이름 만 있으면됩니다.
tempfile.NamedTemporaryFile ()을 호출하면 실제 파일 생성 후 파일 핸들이 반환됩니다.
파일 이름 만 얻을 수있는 방법이 있습니까?
# Trying to get temp file path
tf = tempfile.NamedTemporaryFile()
temp_file_name = tf.name
tf.close()
# Here is my real purpose to get the temp_file_name
f = gzip.open(temp_file_name ,'wb')
...
임시 파일 이름을 원한다면 내부 임시 파일 함수를 호출 할 수 있습니다 _get_candidate_names()
.
import tempfile
temp_name = next(tempfile._get_candidate_names())
% e.g. px9cp65s
next
다시 호출 하면 다른 이름 등이 반환됩니다. 이것은 임시 폴더의 경로를 제공하지 않습니다. 기본 'tmp'디렉토리를 얻으려면 다음을 사용하십시오.
defult_tmp_dir = tempfile._get_default_tempdir()
% results in: /tmp
이 작업을 수행하는 가장 쉽고 안전한 방법은 다음과 같습니다.
path = os.path.join(tempfile.mkdtemp(), 'something')
사용자 만 액세스 할 수있는 임시 디렉토리가 생성되므로 보안 문제가 없어야하지만 파일이 생성되지 않으므로 해당 디렉토리에서 생성 할 파일 이름을 선택할 수 있습니다.
조금 늦었을지도 모르지만 문제가 있습니까?
import tempfile
with tempfile.NamedTemporaryFile(dir='/tmp', delete=False) as tmpfile:
temp_file_name = tmpfile.name
f = gzip.open(temp_file_name ,'wb')
tempfile.mktemp()
이 작업을 수행.
그러나 더 이상 사용되지 않습니다. 그러나 파일을 생성 하지 않으며_get_candidate_names()
.
더 이상 사용되지 않는 이유는 이것을 호출하고 실제로 파일을 생성하려는 사이의 시간 차이 때문입니다. 그러나 제 경우에는 그 기회가 너무 희박하고 실패하더라도 그것은 받아 들일 것입니다. 그러나 사용 사례를 평가하는 것은 귀하에게 달려 있습니다.
Joachim Isaksson이 주석에서 말했듯이, 이름 만 알면 다른 프로그램이 프로그램보다 먼저 해당 이름을 사용하면 문제가 발생할 수 있습니다. 가능성은 희박하지만 불가능하지는 않습니다.
따라서이 상황에서 안전한 방법은 서명이있는 전체 GzipFile () 생성자를 사용하는 것 GzipFile( [filename[, mode[, compresslevel[, fileobj]]]])
입니다. 따라서 원하는 경우 열린 fileobj와 파일 이름도 전달할 수 있습니다. 자세한 내용은 gzip 문서를 참조하십시오.
이전 답변을 결합하여 내 솔루션은 다음과 같습니다.
def get_tempfile_name(some_id):
return os.path.join(tempfile.gettempdir(), next(tempfile._get_candidate_names()) + "_" + some_id)
확인 some_id
당신을 위해 필요하지 않은 경우 선택.
'program tip' 카테고리의 다른 글
Android의 테이블 레이아웃에서 동일한 너비의 열 설정 (0) | 2020.11.06 |
---|---|
Bash의 병렬 wget (0) | 2020.11.06 |
가져 오기 응답이 자바 스크립트의 json 객체인지 확인하는 방법 (0) | 2020.11.05 |
.NET의 코드를 사용하여 바탕 화면 배경 무늬 변경 (0) | 2020.11.05 |
Google App Engine (Java)을 사용하여 이미지를 업로드하고 저장하는 방법 (0) | 2020.11.05 |