2012-06-15 2 views
21

저는 약 50 개의 별개의 임시 파일을 생성해야하는 Python 스크립트를 작성하고 있습니다.이 파일은 모두 스크립트 과정에서 자주 추가되고 끝에 병합됩니다. tempfile 모듈이 내가 필요한 것을 할 수 있다고 확신하지만 문서를 읽는 방법을 이해하지 못했습니다.Python의 tempfile.NamedTemporaryFile()을 사용하는 방법?

변수가 아니라 임시 파일을 사용하여 스크립트가 수만 개의 다른 파일을 처리 할 때 이러한 데이터 청크가 커지기 때문에 시스템 메모리를 절약하고 싶습니다.

item = (string from another file) # string must id file for future use 
tmpfile = 'tmpfiles/' + item 
if item not in totalitems: 
    totalitems.add(item) 
    with open(tmpfile, 'w') as itemfile: 
     output = some stuff 
     tmpfile.write(output) 
else: 
    with open(tmpfile, 'a') as itemfile: 
     output = different stuff 
     tmpfile.write(output) 

내가 tempfile.NamedTemporaryFile()입니다 필요 생각 :

다음의 코드 덩어리 내가 현재 untemporary 디렉토리에이 파일 (untemporarily)을 만들 사용하고 해킹입니다. documentation에 따르면 :

해당 이름은 파일 개체의 이름 구성원에서 검색 할 수 있습니다.

불행히도, 나는 그것이 의미하는 것을 이해하지 못합니다. 나중에 처리 할 파일에서 해당 "항목"을 다시 실행할 때 각 파일을 다시 호출 할 수 있어야합니다. 나는 이것이 오히려 똑바로 앞으로 나는 밀도가 있다고 생각합니다. 필자는 Python 2.7.1과 3.2.3 모두를위한이 스크립트 버전을 가지고 있습니다. 나는 단지 하나 또는 다른 사람들이 일하기를 정말로 필요로한다. 나는 모두 학습 운동으로 창조했다.

+0

가능한 중복 http://stackoverflow.com/questions/10501247/best-way- 파일 이름을 파이썬으로 생성) – Joe

+1

@Joe,이 질문의 일부는 연결된 스레드의 복제본처럼 보입니다. 그것의 부분은 아닙니다; 아래 Levon의 대답 아래에있는 주석을보십시오. – Gregory

+0

왜 이러한 파일의 이름을 지정해야합니까? 이름이 지정되지 않은 경우 (사전 삭제 된 경우) 정리의 측면에서 잘못 될 가능성이 적습니다. 이름이 아닌 tmpfile 객체를 저장 한 다음'seek (0)'을 호출하여 읽을 준비가 된 시작으로 이동하거나 그 내용을 mmap하거나 원하는 경우 액세스 할 수 있습니다. –

답변

34

"해당 이름은 파일 개체의 이름 구성원에서 검색 할 수 있습니다."

In [4]: import tempfile 

In [5]: tf = tempfile.NamedTemporaryFile() 
In [6]: tf.name # retrieve the name of the temp file just created 
Out[6]: 'c:\\blabla\\locals~1\\temp\\tmptecp3i' 

:이 닫힐 때 파일이 삭제됩니다 기본적으로

당신과 같이 만든 임시 파일의 이름을 얻을 수 있다는 것을 의미한다. 그러나 delete 매개 변수가 False이면 파일이 자동으로 삭제되지 않습니다. 자세한 내용은 Python docs을 참조하십시오.

작성하려는 50 개의 임시 파일 각각의 이름을 검색 할 수 있으므로 나중에 (예 : 말한대로) 다시 사용하기 전에 목록에 저장하십시오. 파일을 닫을 때 사라지지 않도록 적절하게 delete 값을 설정하십시오 (닫은 다음 나중에 다시 열 계획 인 경우).

내가 여기 더 자세히 임시 파일 이름을 만드는 방법을 설명 Best way to generate random file names in Python

[파이썬에서 임의의 파일 이름을 생성하는 가장 좋은 방법은] (의
+0

원래 답변을 가진 스레드에 대한 링크를 제공해 주셔서 감사합니다. 나는 여전히 파일을 어떤 변수 "item"의 값으로 키잉하는 방법을 확신하지 못한다. 나는 그것을 위해 사전을 사용한다는 생각에 부딪쳤다. 이 코드는 위 코드에서 5 행 다음에 적절한 것입니까? 'item_tmpfile = {item : tf.name}'. 그런 다음 나중에'item_tmpfile [item]'을 호출 할 수 있습니다. – Gregory

+0

@pyrogerg 그래, 그게 효과가 있다고 생각, 당신은 각 임시 파일의 이름을'item'이 나중에 임시 파일 이름을 검색하는 키가 될 다른'item'과 연결시킬 것입니다. 네 사전에 결국 엔트리가 50 개가 될 거라고 생각해, 그렇지? 사용간에 파일을 닫으려고합니까? 그렇다면'delete' 매개 변수에 유의하십시오. – Levon

+0

'삭제'도움말을 제공해 주셔서 감사합니다. 나는 당신의 원래 대답에서 그것을 붙 잡았다. 나는 지금 내가 옳은 길에 있다고 생각한다. 나는이 파일들을 스크립트 과정에서 다른 것과 같이 사용할 수 있다고 생각한다. 'with open (item_tmpfiles [item])을 tf :'로 사용 하시겠습니까? – Gregory