Файловый ввод/вывод Python

Здесь описаны только базовые функции ввода-вывода. Для получения информации о других функциях обратитесь к стандартной документации Python.

Вывод на экран

Самый простой способ вывода — использовать оператор print, в который можно передать ноль или более выражений, разделённых запятыми. Эта функция преобразует переданные вами выражения в строковое представление и записывает результат в стандартный вывод следующим образом:

#!/usr/bin/python
# -*- coding: UTF-8 -*- 

print "Python 是一个非常棒的语言,不是吗?"

На вашем стандартном экране будет отображён следующий результат:

Python 是一个非常棒的语言,不是吗?

Чтение ввода с клавиатуры

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

  • raw_input
  • input

Функция raw_input

Функция raw_input([prompt]) читает одну строку из стандартного ввода и возвращает строку (с удаленным завершающим символом новой строки):

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
 
str = raw_input("请输入:")
print "你输入的内容是: ", str

Это предложит вам ввести любую строку, а затем отобразит ту же строку на экране. Когда я ввожу "Hello Python!", вывод выглядит следующим образом:

请输入:Hello Python!
你输入的内容是:  Hello Python!

Функция input

input([prompt])функция иraw_input([prompt])Функции в основном похожи, но input может принимать выражение Python в качестве входных данных и возвращать результат операции.

#!/usr/bin/python
# -*- coding: UTF-8 -*- 
 
str = input("请输入:")
print "你输入的内容是: ", str

Это выдаст результаты, соответствующие введенным данным, следующим образом:

请输入:[x*5 for x in range(2,10,2)]
你输入的内容是:  [10, 20, 30, 40]

Открытие и закрытие файлов

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

Python по умолчанию предоставляет необходимые функции и методы для базовых файловых операций. Вы можете использоватьfileфайловый объект для выполнения большинства файловых операций.

Функция open

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

Синтаксис:

file object = open(file_name [, access_mode][, buffering])

Детали каждого параметра приведены ниже:

  • file_name: Переменная file_name — это строковое значение, содержащее имя файла, к которому вы хотите получить доступ.
  • access_mode: access_mode определяет режим, в котором открывается файл: только для чтения, для записи, для добавления и т. д. См. полный список всех возможных значений ниже. Этот параметр необязательный, а режим доступа к файлу по умолчанию — только для чтения (r).
  • buffering: Если для buffering задано значение 0, буферизация не выполняется. Если buffering равен 1, при доступе к файлам выполняется построчная буферизация. Если buffering задан как целое число больше 1, оно указывает размер буфера области буферизации. Если используется отрицательное значение, размер буфера равен системному значению по умолчанию.

Полный список режимов открытия файлов:

ModeОписание
tТекстовый режим (по умолчанию).
xРежим записи, создаёт новый файл; если файл уже существует, будет сообщено об ошибке.
bДвоичный режим.
+Открывает файл для обновления (доступен для чтения и записи).
UУниверсальный режим новой строки (не рекомендуется).
rОткрывает файл в режиме только для чтения. Указатель файла будет установлен в начало файла. Это режим по умолчанию.
rbОткрывает файл в бинарном формате только для чтения. Указатель файла будет установлен в начало файла. Это режим по умолчанию. Обычно используется для нетекстовых файлов, таких как изображения, и т. д.
r+Открывает файл для чтения и записи. Указатель файла будет установлен в начало файла.
rb+Открывает файл в бинарном формате для чтения и записи. Указатель файла будет установлен в начало файла. Обычно используется для нетекстовых файлов, таких как изображения, и т. д.
wОткрывает файл только для записи. Если файл уже существует, он открывает файл и начинает редактирование с начала, то есть исходное содержимое будет удалено. Если файл не существует, создаётся новый файл.
wbОткрывает файл в бинарном формате только для записи. Если файл уже существует, он открывает файл и начинает редактирование с начала, то есть исходное содержимое будет удалено. Если файл не существует, создаётся новый файл. Обычно используется для нетекстовых файлов, таких как изображения, и т. д.
w+Открывает файл для чтения и записи. Если файл уже существует, он открывается и редактируется с начала, то есть исходное содержимое будет удалено. Если файл не существует, создаётся новый файл.
wb+Открывает файл в бинарном формате для чтения и записи. Если файл уже существует, он открывается и редактируется с начала, то есть исходное содержимое будет удалено. Если файл не существует, создаётся новый файл. Обычно используется для нетекстовых файлов, таких как изображения, и т. д.
aОткрывает файл для добавления. Если файл уже существует, указатель файла будет установлен в конец файла. То есть новое содержимое будет записано после существующего содержимого. Если файл не существует, создаётся новый файл для записи.
abОткрывает файл в бинарном формате для добавления. Если файл уже существует, указатель файла будет установлен в конец файла. То есть новое содержимое будет записано после существующего содержимого. Если файл не существует, создаётся новый файл для записи.
a+Открывает файл для чтения и записи. Если файл уже существует, указатель файла будет установлен в конец файла. При открытии файл будет находиться в режиме добавления. Если файл не существует, создаётся новый файл для чтения и записи.
ab+Открывает файл в бинарном формате для добавления. Если файл уже существует, указатель файла будет установлен в конец файла. Если файл не существует, создаётся новый файл для чтения и записи.

Следующая диаграмма хорошо обобщает эти режимы:

Mode r r+ w w+ a a+
read + + + +
write + + + + +
Создайте + + + +
Перезапись + +
Указатель в начале + + + +
Указатель в конце + +

Атрибуты файлового объекта

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

Ниже приведён список всех атрибутов, связанных с объектом file:

AttributeОписание
file.closedВозвращает true, если файл был закрыт, в противном случае возвращает false.
file.modeВозвращает режим доступа открытого файла.
file.nameВозвращает имя файла.
file.softspaceЕсли после вывода с помощью print должен следовать символ пробела, возвращает false. В противном случае возвращает true.

Следующий пример:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name
print "是否已关闭 : ", fo.closed
print "访问模式 : ", fo.mode
print "末尾是否强制加空格 : ", fo.softspace

Приведённый выше пример выводит следующий результат:

文件名:  foo.txt
是否已关闭 :  False
访问模式 :  w
末尾是否强制加空格 :  0

метод close()

Метод close() объекта File сбрасывает всю информацию, ещё не записанную в буфер, и закрывает файл, после чего запись больше выполняться не может.

Когда ссылку на объект файла переназначают на другой файл, Python закроет предыдущий файл. Хорошей привычкой является закрытие файлов с помощью метода close().

Синтаксис:

fileObject.close()

Пример:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 打开一个文件
fo = open("foo.txt", "w")
print "文件名: ", fo.name
 
# 关闭打开的文件
fo.close()

Приведённый выше пример выводит следующий результат:

文件名:  foo.txt

Чтение и запись файлов:

Объект файла предоставляет ряд методов, которые упрощают доступ к файлам. Давайте посмотрим, как использовать методы read() и write() для чтения и записи файлов.

Метод write()

Метод write() может записать любую строку в открытый файл. Важно отметить, что строки Python могут быть двоичными данными, а не только текстом.

Метод write() не добавляет символ новой строки ('\n') в конец строки:

Синтаксис:

fileObject.write(string)

Здесь передаваемый параметр — это содержимое, которое нужно записать в открытый файл.

Пример:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 打开一个文件
fo = open("foo.txt", "w")
fo.write( "www.example.com!\nVery good site!\n")
 
# 关闭打开的文件
fo.close()

Приведённый выше метод создаст файл foo.txt, запишет в него полученное содержимое и в конце закроет файл. Если вы откроете этот файл, вы увидите следующее содержимое:

$ cat foo.txt 
www.example.com!
Very good site!

Метод read()

Метод read() читает строку из открытого файла. Важно отметить, что строки Python могут быть двоичными данными, а не только текстом.

Синтаксис:

fileObject.read([count])

Здесь передаваемый параметр — это количество байтов, которое нужно прочитать из открытого файла. Этот метод начинает чтение с начала файла. Если count не передан, он попытается прочитать как можно больше содержимого, скорее всего, до конца файла.

Пример:

Здесь мы используем файл foo.txt, созданный выше.

Пример

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# Открыть файл
fo = open("foo.txt", "r+")
str = fo.read(10)
print "Прочитанная строка: ", str
# Закрыть открытый файл
fo.close()

Приведённый выше пример выводит следующий результат:

读取的字符串是 :  www.example

Позиционирование в файле

Метод tell() сообщает текущую позицию в файле. Другими словами, следующее чтение или запись произойдет через столько байтов после начала файла.

Метод seek(offset[, from]) изменяет текущую позицию в файле. Переменная offset указывает количество байтов для перемещения. Переменная from задает опорную позицию, от которой начинается перемещение байтов.

Если from равно 0, это означает, что в качестве опорной позиции для перемещения байтов используется начало файла. Если установлено 1, в качестве опорной позиции используется текущая позиция. Если установлено 2, то в качестве опорной позиции будет использоваться конец файла.

Пример:

Используйте файл foo.txt, созданный выше.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 打开一个文件
fo = open("foo.txt", "r+")
str = fo.read(10)
print "读取的字符串是 : ", str
 
# 查找当前位置
position = fo.tell()
print "当前文件位置 : ", position
 
# 把指针再次重新定位到文件开头
position = fo.seek(0, 0)
str = fo.read(10)
print "重新读取字符串 : ", str
# 关闭打开的文件
fo.close()

Вывод приведенного выше примера:

读取的字符串是 :  www.example
当前文件位置 :  10
重新读取字符串 :  www.example

Переименование и удаление файлов

Модуль os в Python предоставляет методы, которые помогают выполнять операции обработки файлов, такие как переименование и удаление файлов.

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

Метод rename()

Метод rename() требует два параметра: текущее имя файла и новое имя файла.

Синтаксис:

os.rename(current_file_name, new_file_name)

Пример:

В следующем примере будет переименован существующий файл test1.txt.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
 
# 重命名文件test1.txt到test2.txt.
os.rename( "test1.txt", "test2.txt" )

Метод remove()

Вы можете использовать метод remove() для удаления файлов, и вам нужно передать имя удаляемого файла в качестве параметра.

Синтаксис:

os.remove(file_name)

Пример:

В следующем примере будет удалён существующий файл test2.txt.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
 
# 删除一个已经存在的文件test2.txt
os.remove("test2.txt")

Каталоги в Python:

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

Метод mkdir()

Вы можете использовать метод mkdir() модуля os для создания новых каталогов в текущем каталоге. Вам нужно передать параметр, содержащий имя создаваемого каталога.

Синтаксис:

os.mkdir("newdir")

Пример:

В следующем примере будет создан новый каталог test в текущем каталоге.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
 
# 创建目录test
os.mkdir("test")

Метод chdir()

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

Синтаксис:

os.chdir("newdir")

Пример:

Следующий пример перейдёт в каталог "/home/newdir".

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
 
# 将当前目录改为"/home/newdir"
os.chdir("/home/newdir")

Метод getcwd()

Метод getcwd() отображает текущий рабочий каталог.

Синтаксис:

os.getcwd()

Пример:

В следующем примере выводится текущий каталог:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
 
# 给出当前的目录
print os.getcwd()

Метод rmdir()

Метод rmdir() удаляет каталог, при этом имя каталога передаётся в качестве параметра.

Перед удалением этого каталога сначала нужно очистить всё его содержимое.

Синтаксис:

os.rmdir('dirname')

Пример:

Ниже приведён пример удаления каталога "/tmp/test". Полное имя каталога должно быть указано, иначе каталог будет искаться в текущем каталоге.

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
 
# 删除”/tmp/test”目录
os.rmdir( "/tmp/test"  )

Методы, связанные с файлами и каталогами

Файловые объекты и объекты ОС предоставляют множество методов для работы с файлами и каталогами. Чтобы просмотреть подробности, щёлкните ссылки ниже:

Другие расширения