English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Основной курс Python

Контроль потока в Python

Функции в Python

Типы данных в Python

Файловые операции в Python

Объекты и классы в Python

Даты и время в Python

Продвинутые знания Python

Руководство по Python

Файлы I/O в Python

Что такое файл?

Файл - это命名位置 на диске, используемый для хранения связанных данных. Он используется для постоянного хранения данных в неэнергонезависимой памяти (например, на жестком диске).

Поскольку энергонезависимая память (RAM) является легкоустранимой, данные теряются при выключении компьютера, поэтому мы используем файлы для хранения данных на будущее.

Когда мы хотим читать или записывать в файл, мы должны сначала открыть его. После завершения работы файл необходимо закрыть, чтобы освободить ресурсы, связанные с файлом.

Таким образом, в Python операции с файлами выполняются в следующем порядке.

  1. Открываем файл

  2. Чтение или запись (выполнение операции)

  3. Закрываем файл

Как открыть файл?

Python имеет встроенную функцию open() для открытия файлов. Эта функция возвращает объект файла, также называемый хендлом, так как он используется для соответствующего чтения или изменения файла.

>>> f = open("test.txt") # Открываем файл в текущей директории
>>> f = open("C:/Python33/README.txt") # Указание полного пути

Мы можем指定 режим при открытии файла. В режиме мы указываем, читаем 'r', пишем 'w' или добавляем 'a' к файлу. Мы также указываем, открывать ли файл в текстовом или двоичном режиме.

Стандартная настройка - чтение в текстовом режиме. В этом режиме при чтении из файла мы получаем строку.

С другой стороны, двоичный режим возвращает байты, который используется для обработки не текстовых файлов (например, изображений или файлов exe)

Режимы файлов Python
РежимОписание
'r'Открываем файл для чтения (по умолчанию)
'w'Открываем файл для записи. Если файл не существует, создается новый, или если он существует, его обрезают.
'x'Открываем файл для эксклюзивного создания. Если файл уже существует, операция не удастся.
'a'Открываем для записи в конце файла без обрезки. Если файл не существует, создается новый.
't'Открываем в текстовом режиме (по умолчанию)
'b'Открываем в двоичном режиме.
'+'Открываем файл для обновления (чтения и записи)
f = open("test.txt") # Эквивалент 'r' или 'rt'
f = open("test.txt",'w') # Запись в текстовом режиме
f = open("img.bmp",'r+b') # Чтение и запись в двоичном режиме

В отличие от других языков, символ 'a' до кодирования в ASCII (или эквивалентной кодировке) не предполагает числовое значение 97.

Кроме того, стандартная кодировка зависит от платформы. В Windows это 'cp1252', а в Linux 'utf-8'.

Таким образом, мы также не можем рассчитывать на стандартную кодировку, иначе поведение нашего кода будет различаться на различных платформах.

Таким образом, при обработке файла в текстовом режиме рекомендуется强烈 указать тип кодирования.

f = open("test.txt",mode='r',encoding='utf-8')

Как закрыть файл с помощью Python?

После выполнения операций с файлом нам нужно правильно закрыть файл.

Закрытие файла освободит ресурсы, связанные с этим файлом, и будет выполнено с помощью метода close().

Python имеет мусоросборник для удаления неупоминаемых объектов, но мы绝对 не можем рассчитывать на него для закрытия файлов.

f = open("test.txt",encoding='utf-8')
# Выполнение файловых операций
f.close()

Этот метод не является полностью безопасным. Если при выполнении某些 операций с файлом возникает исключение, код выйдет без закрытия файла.

Одним из более безопасных методов являетсяtry ... finallyблок.

try:
   f = open("test.txt",encoding='utf-8')
   # Выполнение файловых операций
finally:
   f.close()

Таким образом, мы можем гарантировать, что файл будет закрыт правильно, даже если будет вызван исключение,从而导致 остановку потока программы.

Лучшим方法是 использовать с помощью оператора with. Это гарантирует, что файл будет закрыт, когда退出 блок with.

Мы не должны явно вызывать метод close(). Он выполняется автоматически.

with open("test.txt",encoding='utf-8') as f:
   # Выполнение файловых операций

Как записать файл с помощью Python?

Чтобы записать в файл с помощью Python, мы можем записать в режим 'w', добавить в режим 'a' или создать эксклюзивно в режиме 'x'.

Мы должны быть осторожны при использовании режима 'w', так как он заменяет файл (если он уже существует). Все предыдущие данные будут удалены.

Запись строки или последовательности байтов (для двоичных файлов) выполняется с помощью метода write(). Этот метод возвращает количество введенных в файл символов.

with open("test.txt",'w',encoding='utf-8') as f:
   f.write("my first file\n")
   f.write("This file\n\n")
   f.write("contains three lines\n")

Если 'test.txt' не существует, программа создаст новый файл с именем. Если он действительно существует, он будет заменен.

Мы должны включить символы перевода строки ourselves, чтобы отличать различные строки.

Как читать файл в Python?

Чтобы использовать Python для чтения файла,我们必须以读取模式打开文件。

Существует несколько методов для этой цели. Мы можем использовать метод read(size) для чтенияРазмерДанных. Если не указанРазмерПараметр, который будет читать и возвращать до конца файла.

>>> f = open("test.txt",'r',encoding = 'utf-8')
>>> f.read(4)            # Чтение первых 4 символов
'This'
>>> f.read(4)            # Чтение следующих 4 символов
' is '
>>> f.read()              # Чтение оставшейся части до конца файла
'my first file\nЭтот файл\nсодержит три строки\n'
>>> f.read()            # Дополнительное чтение возвращает пустую строку
''

Мы видим, что метод read() возвращает символ перевода каретки '\n'. После достижения конца файла, мы получим пустую строку при дальнейшем чтении.

Мы можем использовать метод seek() для изменения текущего положения курсора файла. Также, метод tell() возвращает наше текущее положение (в байтах).

>>> f.tell()            # Получение текущего положения файла
56
>>> f.seek(0)            # Перемещение курсора файла в начальное положение
0
>>> print(f.read())        # Чтение всего файла
Это мой первый файл
Этот файл
содержит три строки

Мы можем использоватьЦикл forЧтение файла построчно. Это как эффективно, так и быстро.

>>> for line in f:
...    print(line, end = '')
...
Это мой первый файл
Этот файл
содержит три строки

Строки файла themselves содержат символ перевода каретки '\n'.

Кроме того, параметр end в функции print() предотвращает двойную перевод каретки при печати.

Или, мы можем использовать метод readline() для чтения отдельных строк файла. Этот метод читает файл до строки перевода каретки, включая её.

>>> f.readline()
'Это мой первый файл\n'
>>> f.readline()
'Этот файл\n'
>>> f.readline()
'содержит три строки\n'
>>> f.readline()
''

В конце концов, метод readlines() возвращает список всех оставшихся строк файла. При достижении конца файла (EOF) все эти методы чтения возвращают пустую строку.

>>> f.readlines()
['Это мой первый файл\n', 'Этот файл\n', 'содержит три строки\n']

Методы файла Python

Файл имеет множество доступных методов. Некоторые из них использованы в примерах выше.

Это полный список методов в текстовом режиме с кратким описанием.

Методы файла Python
close()Закрыть файл.
detach()Вернуть отделенный исходный поток (raw stream) из буфера.
fileno()Вернуть цифровой код потока из точки зрения операционной системы.
flush()Очистить внутренний буфер.
isatty()Вернуть, является ли поток файла интерактивным.
read()Вернуть содержимое файла.
readable()Вернуть, можно ли читать поток файла.
readline()Вернуть строку файла.
readlines()Вернуть список строк файла.
seek()Изменить положение файла.
seekable()Вернуть, позволяет ли файл изменять положение файла.
tell()Вернуть текущее положение файла.
truncate()Уменьшить размер файла до указанного.
writeable()Вернуть, можно ли写入 файл.
write()Записать указанную строку в файл.
writelines()Записать список строк в файл.