Для работы с файлами в 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.']
Ссылки по теме