2011-12-20 16 views
21

Ho questa funzione che fa riferimento al percorso di un file:creazione di un file tmp in python

some_obj.file_name(FILE_PATH) 

dove FILE_PATH è una stringa di percorso di un file, vale a dire 'H: /path/FILE_NAME.ext '

voglio creare un file di FILE_NAME.ext dentro il mio script python con il contenuto di una stringa:

some_string = 'this is some content' 

come andare su questo? Lo script python verrà inserito all'interno di una finestra Linux. Penso di dover usare

import tempfile 
import os 
import sys 
os.getcwd() 

o qualcosa del genere. Grazie!

+0

Apri con 'w' e quindi chiuderlo, utilizzare 'os.touch (fname)'. – khachik

+0

Perché hai bisogno del file temporaneo, quindi? – plaes

+0

Ho una funzione che chiama il FILE_PATH dell'oggetto quindi deve essere lì – SuperString

risposta

24

C'è un tempfile module per Python, ma una creazione di file semplice fa anche il trucco:

new_file = open("path/to/FILE_NAME.ext", "w") 

Ora è possibile scrivere ad esso utilizzando il metodo write:

new_file.write('this is some content') 

Con il modulo tempfile potrebbe essere il seguente:

import tempfile 

new_file, filename = tempfile.mkstemp() 

print(filename) 

os.write(new_file, "this is some content") 
os.close(new_file) 

Con mkstemp sei responsabile dell'eliminazione del file dopo aver finito con esso. Con altri argomenti, puoi influenzare la directory e il nome del file.


UPDATE

Come giustamente sottolineato da Emmet Speer, ci sono security considerations quando si utilizza mkstemp, come il codice del client è responsabile per la chiusura/ripulire il file creato. Un modo migliore per gestire è il seguente frammento (presa dal link):

import os 

fd, path = tempfile.mkstemp() 
try: 
    with os.fdopen(fd, 'w') as tmp: 
     # do stuff with temp file 
     tmp.write('stuff') 
finally: 
    os.remove(path) 

Il os.fdopen avvolge il descrittore di file in un oggetto file Python, che chiude automaticamente quando la with uscite. La chiamata a os.remove elimina il file quando non è più necessario.

+0

Il secondo parametro di 'mkstemp' è il nome del file. Penso che potrebbe essere importante per un paio di persone. La prego di menzionarlo? –

+0

@MartinThoma: Hm, i documenti (https://docs.python.org/3/library/tempfile.html#tempfile.mkstemp) dicono diversamente: i parametri di 'mkstemp' sono' prefisso', 'suffisso',' dir' e 'testo'. Certo, influenzano tutti il ​​nome file finale, ma in realtà non è possibile specificare il nome completo del file. – Constantinius

+0

@Constantinus: Oops, scusa, non volevo scrivere il parametro ma restituire il valore. –

62

Penso che tu sia alla ricerca di questo: http://docs.python.org/library/tempfile.html

import tempfile 
f = tempfile.NamedTemporaryFile(delete=False) 
f.close() 
f.name 
+2

questa è una buona risposta basata sull'argomento della domanda, di cui google prende atto, piuttosto che sul particolare problema di SuperString –

+0

In duckduckgo è il primo: D – ZiTAL