2012-03-02 21 views
23

vorrei salvare una stringa in un file con un programma di pitone di nome Failed.pyPython Salva su file

Ecco quello che ho finora:

myFile = open('today','r') 

ips = {} 

for line in myFile: 
    parts = line.split(' ') 
    if parts[1] == 'Failure': 
     if parts[0] in ips: 
      ips[pars[0]] += 1 
     else: 
      ips[parts[0]] = 0 

for ip in [k for k, v in ips.iteritems() if v >=5]: 
    #write to file called Failed.py 
+1

Per pura curiosità: c'è un modo per trasformare una risposta in quella accettata? (Stefan sembra essere inattivo da anni) – Wolf

risposta

77
file = open('Failed.py', 'w') 
file.write('whatever') 
file.close() 

Ecco un altro divinatorio versione, che chiude automaticamente il file, anche se c'era un'eccezione nel blocco spostato:

with open('Failed.py', 'w') as file: 
    file.write('whatever') 
+2

'file' non è una parola protetta in python, non c'è bisogno di usare' file_', a meno che la tua guida di stile di codifica richieda il suffisso '_' sulle variabili in qualsiasi contesto (file, funzione , classe, metodo) ciò avviene in. – zstewart

+4

Non si tratta di stile di codifica. 'file' è una funzione built-in come [molti altri] (https://docs.python.org/2/library/functions.html). È [non raccomandato] (http://stackoverflow.com/questions/9109333/is-it-bad-practice-to-use-a-built-in-function-name-as-an-attribute-or-method- ide) per ombreggiare queste funzioni integrate con altre variabili. – warvariuc

+1

'file' è stato deprecato e rimosso in python 3, quindi è perfettamente ok usarlo lì. Non ho visto il tag 2.7 sulla domanda, e di solito uso python 3 ... – zstewart

11

È necessario aprire la file di nuovo utilizzando open(), ma questa volta passando 'w' per indicare che si desidera scrivere sul file. Vorrei anche raccomandare di usare with per assicurarti che il file venga chiuso quando hai finito di scriverlo.

Ovviamente si consiglia di includere newlines o altra formattazione nel proprio output, ma le basi sono come sopra.

Lo stesso problema con la chiusura del file si applica al codice di lettura. Questo dovrebbe assomigliare a questo:

ips = {} 
with open('today','r') as myFile: 
    for line in myFile: 
     parts = line.split(' ') 
     if parts[1] == 'Failure': 
      if parts[0] in ips: 
       ips[pars[0]] += 1 
      else: 
       ips[parts[0]] = 0 
+1

+1 per l'uso di' with' – Anentropic

0
myFile = open('today','r') 

ips = {} 

for line in myFile: 
    parts = line.split() 
    if parts[1] == 'Failure': 
     ips.setdefault(parts[0], 0) 
     ips[parts[0]] += 1 

of = open('failed.py', 'w') 
for ip in [k for k, v in ips.iteritems() if v >=5]: 
    of.write(k+'\n') 

Partenza setDefault, rende il codice un po 'più leggibile. Poi fai il dump dei tuoi dati con il metodo di scrittura dell'oggetto file.

+1

Hai bisogno di chiudere i file !!! – plaes

+1

Esattamente, quello che ha detto. Aggiungi un of.close alla fine lì. Altrimenti supponi che il GC chiuderà il file. L'esplicito è meglio che implicito. Grazie. – jaime

+1

@jaime In realtà devi fare molto di più che chiamare "chiudi". Hai bisogno di farlo in un blocco finalmente per difendersi dalle eccezioni. Il modo idiomatico è usare un gestore di contesto 'with'. –