Python Зберегти у файл


80

Я хотів би зберегти рядок у файл із назвою програмою python Failed.py

Ось що я маю на сьогодні:

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

2
З чистої цікавості: чи є спосіб перетворити одну відповідь на прийняту? (Стефан, здається, неактивний роками)
Вольф

У чому насправді проблема?
user207421

Відповіді:


170
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

6
Справа не в стилі кодування. fileє вбудованою функцією, як і багато інших . Це не рекомендується затінювати ці вбудовані функції з іншими змінними.
warvariuc

1
fileбуло застарілим та вилученим у python 3, тому цілком нормально використовувати там. Я не бачив тегу 2.7 у питанні, і я зазвичай використовую python 3 ...
zstewart

2
@Anatoly ви не закриваєте файл
warvariuc

3
@warvariuc дякую, ти маєш рацію, тоді це не здається найкращою практикою
Анатолій Васильєв

20

Вам потрібно знову відкрити файл за допомогою 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

2

Ви можете використовувати цю функцію:

def saveListToFile(listname, pathtosave):
    file1 = open(pathtosave,"w") 
    for i in listname:
        file1.writelines("{}\n".format(i))    
    file1.close() 

# to save:
saveListToFile(list, path)

1
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
Точно те, що він сказав. Додайте там закритий файл. До кінця. В іншому випадку ви припускаєте, що GC закриє файл. Явне краще, ніж неявне. Дякую.
Джейме

1
@jaime Дійсно, вам потрібно робити більше, ніж просто телефонувати close. Вам потрібно це зробити в остаточному блоці, щоб захиститися від винятків. Ідіоматичним способом є використання withобробника контексту.
Девід Хеффернан

1
Так, дякую. Це мені прийшло в голову, але я переживав, чи не пояснити, коли нарешті мені зателефонують. Потім, прочитавши ваш коментар, я зрозумів, що він позначив тегом питання python-2.7. Дякую.
Джейме

1

Для того, щоб писати у файл на Python, нам потрібно відкрити його в режимі запису w, додавання aабо ексклюзивного створення x.

Нам слід бути обережними з wрежимом, оскільки він перезапише файл, якщо він уже існує. Завдяки цьому всі попередні дані стираються.

Запис рядка або послідовності байтів (для двійкових файлів) виконується методом write (). Цей метод повертає кількість символів, записаних у файл.

with open('Failed.py','w',encoding = 'utf-8') as f:
   f.write("Write what you want to write in\n")
   f.write("this file\n\n")

Ця програма створить новий файл, названий Failed.pyу поточному каталозі, якщо він не існує. Якщо вона існує, вона перезаписується.

Ми повинні включати символи нового рядка самі, щоб розрізняти різні рядки.


@Stefan Якщо проблему вирішено, позначте її як прийняту.
MRUNAL MUNOT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.