Для работы с файлами в Python используется встроенная функция open()
:
Help on built-in function open in module __builtin__: open(...) open(name[, mode[, buffering]]) -> file object Open a file using the file() type, returns a file object. This is the preferred way to open a file.
С помощью open()
создаётся новый объект, над которым потом можно выполнять другие действия.
Полный список методов можно получить с помощью функции dir()
:
In [25]: dir(file) Out[25]: ['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'closed', 'encoding', 'errors', 'fileno', 'flush', 'isatty', 'mode', 'name', 'newlines', 'next', 'read', 'readinto', 'readline', 'readlines', 'seek', 'softspace', 'tell', 'truncate', 'write', 'writelines', 'xreadlines']
Для завершения работы – используется метод close(), применяемый к созданном объекту.
In [15]: text = 'This is text fro new file.n' In [16]: file = open('newfile', 'w') In [17]: file.close()
Функция open()
принимает первым аргументом имя файла, и вторым – режим доступа:
w
(write) – для записи;
r
(read) – чтение файла;
a
(append) – добавление строк в файл;
r+
(read+) – чтение и/или запись.
Полный список методов можно найти тут>>>.
Второй аргумент не обязателен – если вызвать open()
без него – то по-умолчанию будет использоваться режим read
.
Добавление текста в файл выполняется методом write()
(для записи одной строки) или writelines()
(для записи нескоких строк, переданных в виде списка).
In [28]: file = open('onelinefile', 'w') In [29]: file.write('This is text line in new file.') In [33]: file.close() In [52]: file = open('multilinefile', 'w') In [54]: longtext = ('nThis is first string;n', 'This is second string;n', 'This is third string.') In [55]: file.writelines(longtext) In [57]: file.close()
После чего у нас в файловой системе появятся два новых файла:
$ ls -l | grep file -rw-rw-r-- 1 setevoy setevoy 67 Aug 24 13:45 multilinefile -rw-rw-r-- 1 setevoy setevoy 30 Aug 24 13:43 onelinefile
Для чтения из файла – методы read()
(читает указанное аргументом количество байт, если не указано – читает весь файл), readline()
(читает одну строку) и readlines()
(читает все строки в объекте-файле):
In [59]: file.read(10) Out[59]: 'This is te' In [84]: file.read() Out[84]: 'nThis is first string;nThis is second string;nThis is third string.' In [66]: file.readline() Out[66]: 'This is text line in new file.' In [70]: file.close() In [71]: file = open('multilinefile', 'r+') In [72]: file.readlines() Out[72]: ['n', 'This is first string;n', 'This is second string;n', 'This is third string.'] In [76]: print file.readlines() ['n', 'This is first string;n', 'This is second string;n', 'This is third string.']
Другой способ чтения строк из файла – с помощью цикла for
:
In [80]: file = open('multilinefile', 'r+') In [81]: for string in file: print string, ....: This is first string; This is second string; This is third string. In [82]: file.close()
При использовании метода readline()
необходимо учитывать, что при каждой итерации (вызова read()
к объекту) – он будет считывать следующую строку, а не начинать сначала:
In [86]: file = open('multilinefile', 'r+') In [87]: file.readline() Out[87]: 'n' In [88]: file.readline() Out[88]: 'This is first string;n' In [89]: file.readline() Out[89]: 'This is second string;n' In [90]: file.readline() Out[90]: 'This is third string.' In [91]: file.readline() Out[91]: '' In [92]: file.close()
Хорошим способом работы с файлами является использование оператора With
, т.к. он всегда выполняет close()
, и не оставляет “мусора”:
In [94]: with open('multilinefile', 'r+') as file: ....: strings = file.readlines() ....: print strings ....: ['n', 'This is first string;n', 'This is second string;n', 'This is third string.']
Т.к. методы read*
возвращают обычный строковый объект- над ним можно выполнять обычные строковые методы:
In [115]: file = open('newfile', 'r+') In [116]: file.write('string') In [117]: result = file.readline() In [118]: print type(result) <type 'str'>
In [100]: with open('multilinefile', 'r+') as file: strings = file.readlines() for lines in strings: result = lines.split() print result .....: [] ['This', 'is', 'first', 'string;'] ['This', 'is', 'second', 'string;'] ['This', 'is', 'third', 'string.']
Ссылки по теме