2012-03-02 3 views
23

Я хотел бы сохранить строку в файл с программой питона с именем Failed.pyPython Сохранить в файл

Вот то, что я до сих пор:

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

Из чистого любопытства: есть ли способ превратить один ответ в принятый? (Стефан, кажется, неактивен годами) – Wolf

ответ

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

Вот более вещий версия, которая автоматически закрывает файл, даже если в обернутом блоке было исключение:

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

'file' не является защищенным словом в python, нет необходимости использовать' file_', если вашему руководству по стилю кодировки не требуется суффикс '_' для переменных в любом контексте (файл, функция , класс, метод), это имеет место. – zstewart

+4

Речь идет не о стиле кодирования. 'file' является встроенной функцией как [многие другие] (https://docs.python.org/2/library/functions.html). [Не рекомендуется] (http://stackoverflow.com/questions/9109333/is-it-bad-practice-to-use-a-built-in-function-name-as-an-attribute-or-method- ide), чтобы затенять эти встроенные функции другими переменными. – warvariuc

+1

'file' был устаревшим и удален в python 3, так что это нормально использовать. Я не видел тег 2.7 на этом вопросе, и я обычно использую python 3 ... – zstewart

11

Необходимо открыть файл снова, используя open(), но на этот раз передайте 'w', чтобы указать, что вы хотите записать файл. Я также рекомендовал бы использовать with, чтобы гарантировать, что файл будет закрыт, когда вы закончите писать на него.

with open('Failed.txt', 'w') as f: 
    for ip in [k for k, v in ips.iteritems() if v >=5]: 
     f.write(ip) 

Естественно, вы можете включить в свой вывод новые строки или другое форматирование, но основы такие, как указано выше.

Эта же проблема с закрытием файла относится к коду чтения. Это должно выглядеть следующим образом:

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 для использования' 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') 

Заканчивать SetDefault, это делает код немного более разборчивыми. Затем вы даете свои данные с помощью метода записи объекта файла.

+1

Вам нужно закрыть файлы !!! – plaes

+1

Точно, что он сказал. Добавьте до конца. В противном случае вы предполагаете, что GC закроет файл. Явный лучше, чем неявный. Благодарю. – jaime

+1

@jaime Действительно, вам нужно сделать больше, чем просто называть 'close'. Вам нужно сделать это в конце блока для защиты от исключений. Идиоматическим способом является использование обработчика контекста 'with'. –

Смежные вопросы