При записи, очень важно определиться с режимом открытия файла, чтобы случайно его не удалить:
w
- открыть файл для записи. Если файл существует, то его содержимое удаляется
a
- открыть файл для дополнения записи. Данные добавляются в конец файла
При этом, оба режима создают файл, если он не существует
Для записи в файл используются такие методы:
write()
- записать в файл одну строкуwritelines()
- позволяет передавать в качестве аргумента список строкwrite()
Метод write
ожидает строку, для записи.
Для примера, возьмем список строк с конфигурацией:
In [1]: cfg_lines = ['!', ...: 'service timestamps debug datetime msec localtime show-timezone year', ...: 'service timestamps log datetime msec localtime show-timezone year', ...: 'service password-encryption', ...: 'service sequence-numbers', ...: '!', ...: 'no ip domain lookup', ...: '!', ...: 'ip ssh version 2', ...: '!']
Открытие файла r2.txt в режиме для записи:
In [2]: f = open('r2.txt', 'w')
Преобразуем список команд в одну большую строку с помощью join
:
In [3]: cfg_lines_as_string = '\n'.join(cfg_lines) In [4]: cfg_lines_as_string Out[4]: '!\nservice timestamps debug datetime msec localtime show-timezone year\nservice timestamps log datetime msec localtime show-timezone year\nservice password-encryption\nservice sequence-numbers\n!\nno ip domain lookup\n!\nip ssh version 2\n!'
Запись строки в файл:
In [5]: f.write(cfg_lines_as_string)
Аналогично можно добавить строку вручную:
In [6]: f.write('\nhostname r2')
После завершения работы с файлом, его необходимо закрыть:
In [7]: f.close()
Так как ipython поддерживает команду cat, можно легко посмотреть содержимое файла:
In [8]: cat r2.txt ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 ! hostname r2
writelines()
Метод writelines()
ожидает список строк, как аргумент.
Запись списка строк cfg_lines в файл:
In [1]: cfg_lines = ['!', ...: 'service timestamps debug datetime msec localtime show-timezone year', ...: 'service timestamps log datetime msec localtime show-timezone year', ...: 'service password-encryption', ...: 'service sequence-numbers', ...: '!', ...: 'no ip domain lookup', ...: '!', ...: 'ip ssh version 2', ...: '!'] In [9]: f = open('r2.txt', 'w') In [10]: f.writelines(cfg_lines) In [11]: f.close() In [12]: cat r2.txt !service timestamps debug datetime msec localtime show-timezone yearservice timestamps log datetime msec localtime show-timezone yearservice password-encryptionservice sequence-numbers!no ip domain lookup!ip ssh version 2!
В результате, все строки из списка, записались в одну строку файла, так как в конце строк не было символа \n
.
Добавить перевод строки можно по-разному.
Например, можно просто обработать список в цикле:
In [13]: cfg_lines2 = [] In [14]: for line in cfg_lines: ....: cfg_lines2.append( line + '\n' ) ....: In [15]: cfg_lines2 Out[15]: ['!\n', 'service timestamps debug datetime msec localtime show-timezone year\n', 'service timestamps log datetime msec localtime show-timezone year\n', 'service password-encryption\n', 'service sequence-numbers\n', '!\n', 'no ip domain lookup\n', '!\n', 'ip ssh version 2\n',
Или использовать list comprehensions:
In [16]: cfg_lines3 = [ line + '\n' for line in cfg_lines ] In [17]: cfg_lines3 Out[17]: ['!\n', 'service timestamps debug datetime msec localtime show-timezone year\n', 'service timestamps log datetime msec localtime show-timezone year\n', 'service password-encryption\n', 'service sequence-numbers\n', '!\n', 'no ip domain lookup\n', '!\n', 'ip ssh version 2\n', '!\n']
Если любой, из получившихся списков записать заново в файл, то в нём уже будут переводы строк:
In [18]: f = open('r2.txt', 'w') In [19]: f.writelines(cfg_lines3) In [20]: f.close() In [21]: cat r2.txt ! service timestamps debug datetime msec localtime show-timezone year service timestamps log datetime msec localtime show-timezone year service password-encryption service sequence-numbers ! no ip domain lookup ! ip ssh version 2 !