Ввод-вывод файлов в Python: полное руководство по операциям I/O
Вывод на экран
Самый простой способ вывода — использование оператора print, куда можно передать ноль или более выражений, разделенных запятыми. Эта функция преобразует переданные выражения в строку и записывает результат в стандартный вывод:
#!/usr/bin/python
print("Python is really a great language,", "isn't it?")
Результат на экране:
Python is really a great language, isn't it?
Чтение ввода с клавиатуры
Python предоставляет две встроенные функции для чтения строки текста из стандартного ввода (по умолчанию — клавиатура):
raw_input(в Python 2)input
Функция raw_input (Python 2)
Функция raw_input([prompt]) считывает одну строку из стандартного ввода и возвращает её как строку (удаляя завершающий символ новой строки).
#!/usr/bin/python
str = raw_input("Enter your input: ")
print("Received input is : ", str)
При вводе "Hello Python!" вывод будет:
Enter your input: Hello Python
Received input is : Hello Python
Функция input
Функция input([prompt]) эквивалентна raw_input, за исключением того, что она предполагает, что ввод — это валидное выражение Python, и возвращает вычисленный результат.
#!/usr/bin/python
str = input("Enter your input: ")
print("Received input is : ", str)
При вводе [x*5 for x in range(2,10,2)] результат:
Enter your input: [x*5 for x in range(2,10,2)]
Received input is : [10, 20, 30, 40]
Открытие и закрытие файлов
До сих пор мы работали со стандартным вводом и выводом. Теперь посмотрим, как работать с реальными файлами данных.
Python предоставляет базовые функции и методы для манипуляции файлами по умолчанию. Большинство операций с файлами выполняется с помощью объекта file.
Функция open()
Прежде чем читать или записывать файл, нужно открыть его с помощью встроенной функции open(). Она создает объект file, используемый для вызова других связанных методов.
Синтаксис
file_object = open(file_name[, access_mode][, buffering])
Параметры
file_name — строка с именем файла, к которому нужно получить доступ.
access_mode — определяет режим открытия файла: чтение, запись, добавление и т.д. Полный список приведен в таблице ниже. Параметр опционален, по умолчанию — чтение (
r).buffering — если 0, буферизация отключена; если 1 — построчная буферизация; если больше 1 — буферизация с указанным размером; если отрицательное — системный размер по умолчанию.
Режимы открытия файла
| № | Режим и описание |
|---|---|
| 1 | r — открытие только для чтения. Указатель в начале файла. Режим по умолчанию. |
| 2 | rb — открытие только для чтения в бинарном формате. |
| 3 | r+ — открытие для чтения и записи. Указатель в начале. |
| 4 | rb+ — открытие для чтения и записи в бинарном формате. |
| 5 | w — открытие только для записи. Перезаписывает файл, если существует. Создает новый, если нет. |
| 6 | wb — то же в бинарном формате. |
| 7 | w+ — открытие для чтения и записи. Перезаписывает или создает. |
| 8 | wb+ — то же в бинарном формате. |
| 9 | a — открытие для добавления. Указатель в конце файла. Создает новый, если нет. |
| 10 | ab — добавление в бинарном формате. |
| 11 | a+ — открытие для добавления и чтения. |
| 12 | ab+ — добавление и чтение в бинарном формате. |
Атрибуты объекта file
После открытия файла и получения объекта file можно получить различную информацию:
| № | Атрибут и описание |
|---|---|
| 1 | file.closed — возвращает True, если файл закрыт, иначе False. |
| 2 | file.mode — возвращает режим доступа, с которым файл был открыт. |
| 3 | file.name — возвращает имя файла. |
| 4 | file.softspace — возвращает False, если пробел нужен явно для print, иначе True. |
Пример
#!/usr/bin/python
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
print("Closed or not : ", fo.closed)
print("Opening mode : ", fo.mode)
print("Softspace flag : ", fo.softspace)
Результат:
Name of the file: foo.txt
Closed or not : False
Opening mode : wb
Softspace flag : 0
Метод close()
Метод close() объекта file сбрасывает не записанную информацию и закрывает файл, после чего запись больше невозможна.
Python автоматически закрывает файл, когда ссылка на объект файла переназначается. Хорошей практикой является явный вызов close().
fileObject.close()
Пример
#!/usr/bin/python
fo = open("foo.txt", "wb")
print("Name of the file: ", fo.name)
fo.close()
Чтение и запись файлов
Объект file предоставляет набор методов доступа. Рассмотрим read() и write().
Метод write()
Метод write() записывает любую строку в открытый файл. Важно: строки Python могут содержать бинарные данные, а не только текст.
write() не добавляет символ новой строки ('\n') в конец строки.
fileObject.write(string)
Пример
#!/usr/bin/python
fo = open("foo.txt", "wb")
fo.write("Python is a great language.\nYeah its great!!\n")
fo.close()
Содержимое foo.txt:
Python is a great language.
Yeah its great!!
Метод read()
Метод read() читает строку из открытого файла. Строки Python могут содержать бинарные данные помимо текста.
fileObject.read([count])
Параметр — количество байт для чтения. Чтение начинается с начала файла. Если count опущен, читается максимум возможного (до конца файла).
Пример
#!/usr/bin/python
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
fo.close()
Результат:
Read String is : Python is
Позиционирование в файле
Метод tell() сообщает текущую позицию в файле (в байтах от начала).
Метод seek(offset[, from]) меняет текущую позицию. offset — количество байт для перемещения. from — опорная позиция: 0 — начало файла, 1 — текущая позиция, 2 — конец файла.
Пример
#!/usr/bin/python
fo = open("foo.txt", "r+")
str = fo.read(10)
print("Read String is : ", str)
position = fo.tell()
print("Current file position : ", position)
position = fo.seek(0, 0)
str = fo.read(10)
print("Again read String is : ", str)
fo.close()
Результат:
Read String is : Python is
Current file position : 10
Again read String is : Python is
Переименование и удаление файлов
Модуль os предоставляет методы для операций с файлами: переименование и удаление.
Для использования нужно импортировать модуль: import os.
Метод rename()
Принимает два аргумента: текущее имя файла и новое.
os.rename(current_file_name, new_file_name)
Пример
#!/usr/bin/python
import os
os.rename("test1.txt", "test2.txt")
Метод remove()
Удаляет файл по имени.
os.remove(file_name)
Пример
#!/usr/bin/python
import os
os.remove("test2.txt")
Работа с директориями
Все файлы содержатся в директориях. Модуль os имеет методы для создания, удаления и смены директорий.
Метод mkdir()
Создает директорию в текущей директории.
os.mkdir("newdir")
Пример
#!/usr/bin/python
import os
os.mkdir("test")
Метод chdir()
Меняет текущую директорию.
os.chdir("newdir")
Пример
#!/usr/bin/python
import os
os.chdir("/home/newdir")
Метод getcwd()
Возвращает текущую рабочую директорию.
os.getcwd()
Пример
#!/usr/bin/python
import os
os.getcwd()
Метод rmdir()
Удаляет директорию, переданную как аргумент. Перед удалением нужно очистить директорию.
os.rmdir('dirname')
Пример
#!/usr/bin/python
import os
os.rmdir("/tmp/test")
Методы для работы с файлами и директориями
Три важных источника утилит для манипуляции файлами и директориями на Windows и Unix:
Методы объекта
file— функции для манипуляции файлами.Методы объекта
os— методы для обработки файлов и директорий.
Python
- Ввод-вывод в C: scanf() и printf() — подробное руководство
- Работа с файлами в C: мастерство ввода-вывода с fopen, fprintf, fread и fseek
- Мастерство ввода-вывода и импорта модулей в Python: Практическое руководство
- Работа с файлами в Python: открытие, чтение, запись и управление
- Управление директориями и файлами в Python: полное руководство
- Проверка существования файлов и директорий в Python — практическое руководство
- Освоение ввода-вывода файлов в C: создание, открытие и управление файлами
- Заголовочные файлы в C: типы, подключение и лучшие практики
- Ввод-вывод в файлы в C++: чтение и запись с fstream
- Работа с файлами в C#: FileStream, StreamReader, StreamWriter и File API