Основы работы с файлами в python
Содержание:
- Открытие файла с помощью функции open()
- How to Open a Text File
- Извлечение текста с помощью PyPDF2
- Чтение и запись json-файлов
- Файлы CSV
- File Positions
- Способ 2
- Шаг 4 — Запись файла
- Открытие файла
- Чтение CSV-файла при помощи csv.reader(). Метод 1
- Запись абзацев
- Запись файлов CSV
- Чтение из файла Python
- Использование формата JSON
- The file Object Attributes
- Как закрыть файл в Python?
- Методы, связанные с файлом
- The need for “open with” statement
- Модуль PyYAML¶
- Добавление изображений
- 2: Открытие файла
Открытие файла с помощью функции open()
Первый шаг к работе с файлами в Python – научиться открывать файл. Вы можете открывать файлы с помощью метода open().
Функция open() в Python принимает два аргумента. Первый – это имя файла с полным путем, а второй – режим открытия файла.
Ниже перечислены некоторые из распространенных режимов чтения файлов:
- ‘r’ – этот режим указывает, что файл будет открыт только для чтения;
- ‘w’ – этот режим указывает, что файл будет открыт только для записи. Если файл, содержащий это имя, не существует, он создаст новый;
- ‘a’ – этот режим указывает, что вывод этой программы будет добавлен к предыдущему выводу этого файла;
- ‘r +’ – этот режим указывает, что файл будет открыт как для чтения, так и для записи.
Кроме того, для операционной системы Windows вы можете добавить «b» для доступа к файлу в двоичном формате. Это связано с тем, что Windows различает двоичный текстовый файл и обычный текстовый файл.
Предположим, мы помещаем текстовый файл с именем file.txt в тот же каталог, где находится наш код. Теперь мы хотим открыть этот файл.
Однако функция open (filename, mode) возвращает файловый объект. С этим файловым объектом вы можете продолжить свою дальнейшую работу.
#directory: /home/imtiaz/code.py text_file = open('file.txt','r') #Another method using full location text_file2 = open('/home/imtiaz/file.txt','r') print('First Method') print(text_file) print('Second Method') print(text_file2)
Результатом следующего кода будет:
================== RESTART: /home/imtiaz/code.py ================== First Method Second Method >>>
How to Open a Text File
Let’s start by learning how to open a file with Python. In this case, what we mean is to actually use Python to open it and not some other program. For that, we have two choices (in Python 2.x): open or file. Let’s take a look and see how it’s done!
# the open keyword opens a file in read-only mode by default f = open("path/to/file.txt") # read all the lines in the file and return them in a list lines = f.readlines() f.close()
As you can see, it’s really quite easy to open and read a text file. You can replace the «open» keyword with the «file» keyword and it will work the same. If you want to be extra explicit, you can write the open command like this instead:
f = open("path/to/file.txt", mode="r")
The «r» means to just read the file. You can also open a file in «rb» (read binary), «w» (write), «a» (append), or «wb» (write binary). Note that if you use either «w» or «wb», Python will overwrite the file, if it exists already or create it if the file doesn’t exist.
If you want to read the file, you can use the following methods:
- read — reads the whole file and returns the whole thing in a string
- readline — reads the first line of the file and returns it as a string
- readlines — reads the entire file and returns it as a list of strings
You can also read a file with a loop, like this:
f = open("path/to/file.txt") for line in f: print line f.close()
Pretty cool, huh? Python rocks! Now it’s time to take a look at how to open a file with another program.
Извлечение текста с помощью PyPDF2
Начнём с . Ниже приведен скрипт, который позволяет извлечь из PDF‑файла текст и вывести него в консоль.
Сначала импортируем , помня о том, что пакет уже установлен. Задаём имя файла из папки (можете загрузить туда свой файл и поменять в скрипте на имя загруженного файла), открывает документ и получаем информацию о документе, используя метод и общее количество страниц . Далее в цикле читаем каждую страницу, получаем содержимое и печатаем в .
Обратите внимание, что PyPDF2 начинает считать страницы с 0, и поэтому вызов при извлекает первую страницу документа
from PyPDF2 import PdfFileReader pdf_document = "source/Computer-Vision-Resources.pdf" with open(pdf_document, "rb") as filehandle: pdf = PdfFileReader(filehandle) info = pdf.getDocumentInfo() pages = pdf.getNumPages() print("Количество страниц в документе: %i\n\n" % pages) print("Мета-описание: ", info) for i in range(pages): page = pdf.getPage(i) print("Стр.", i, " мета: ", page, "\n\nСодержание;\n") print(page.extractText())
Извлечение текста с помощью PyPDF2
Как видите, извлеченный текст печатается сплошным потоком. Здесь нет ни абзацев, ни разделений предложений. Как указано в документации по PyPDF2, все текстовые данные возвращаются в том порядке, в котором они представлены на странице. В основном, это зависит от внутренней структуры документа PDF и от того, как поток инструкций, создан во время его записи, поэтому их использование может привести к неожиданностям, надо дополнительно «парсить», не очень удобно.
Чтение и запись json-файлов
Для работы с json-объектами предусмотрен встроенный модуль json. Его нужно импортировать для начала.
Практически все объекты Питона можно безболезненно преобразовывать в json-сущности.
В библиотеке json имеется 4 основные функции (таблица 2).
Функция | Характеристика |
dumps() | Преобразовывает объекты Питона в json |
dump() | Записывает преобразованные в json-формат данные в файл |
loads() | Преобразовывает json-данные в словарь |
load() | Считывает содержимое json-файла и делает из них словарь |
Таблица 2 – Ключевые функции модуля json
Так как мы рассматриваем тему создания и чтения файлов, то будем использовать соответствующие инструменты.
Создадим на ПК документ «my.json» с таким содержимым:
Теперь считаем их и представим в виде словаря Python.
Пример кода:
Результат выполнения:
Как видно, десериализация json-данных осуществляется следующим образом:
- Двойные кавычки преобразованы в одинарные;
- Булево значение false превратилось в False;
- Объект null соответствует значению None в Питоне.
А теперь расширим информацию в документе «my.json», добавив еще одного студента.
Пример кода:
Открываем файл в режиме чтения и возможности записи («r+»). Считываем имеющееся в нем содержимое и преобразуем его в словарь. Добавляем новую запись в словарь с ключом «student2». Полностью переписываем содержимое документа с учетом новой информации: делаем отступы (indent=4) для удобства чтения, а также отключаем режим «только ASCII», чтобы появилась возможность вставлять кириллицу.
Файлы CSV
Последнее обновление: 29.04.2017
Одним из распространенных файловых форматов, которые хранят в удобном виде информацию, является формат csv.
Каждая строка в файле csv представляет отдельную запись или строку, которая состоит из отдельных столбцов, разделенных запятыми. Собственно поэтому
формат и называется Comma Separated Values. Но хотя формат csv — это формат текстовых файлов, Python для упрощения работы с ним
предоставляет специальный встроенный модуль csv.
Рассмотрим работу модуля на примере:
import csv FILENAME = "users.csv" users = , , ] with open(FILENAME, "w", newline="") as file: writer = csv.writer(file) writer.writerows(users) with open(FILENAME, "a", newline="") as file: user = writer = csv.writer(file) writer.writerow(user)
В файл записывается двухмерный список — фактически таблица, где каждая строка представляет одного пользователя. А каждый пользователь
содержит два поля — имя и возраст. То есть фактически таблица из трех строк и двух столбцов.
При открытии файла на запись в качестве третьего параметра указывается значение — пустая строка позволяет корректно считывать
строки из файла вне зависимости от операционной системы.
Для записи нам надо получить объект writer, который возвращается функцией . В эту функцию передается открытый файл.
А собственно запись производится с помощью метода Этот метод принимает набор строк. В нашем случае это двухмерный список.
Если необходимо добавить одну запись, которая представляет собой одномерный список, например, , то в этом случае можно вызвать метод
writer.writerow(user)
В итоге после выполнения скрипта в той же папке окажется файл users.csv, который будет иметь следующее содержимое:
Tom,28 Alice,23 Bob,34 Sam,31
Для чтения из файла нам наоборот нужно создать объект reader:
import csv FILENAME = "users.csv" with open(FILENAME, "r", newline="") as file: reader = csv.reader(file) for row in reader: print(row, " - ", row)
При получении объекта reader мы можем в цикле перебрать все его строки:
Tom - 28 Alice - 23 Bob - 34 Sam - 31
Работа со словарями
В примере выше каждая запись или строка представляла собой отдельный список, например, . Но кроме того, модуль csv имеет
специальные дополнительные возможности для работы со словарями. В частности, функция csv.DictWriter() возвращает объект writer,
который позволяет записывать в файл. А функция csv.DictReader() возвращает объект reader для чтения из файла. Например:
import csv FILENAME = "users.csv" users = with open(FILENAME, "w", newline="") as file: columns = writer = csv.DictWriter(file, fieldnames=columns) writer.writeheader() # запись нескольких строк writer.writerows(users) user = {"name" : "Sam", "age": 41} # запись одной строки writer.writerow(user) with open(FILENAME, "r", newline="") as file: reader = csv.DictReader(file) for row in reader: print(row, "-", row)
Запись строк также производится с помощью методов и . Но теперь каждая строка представляет собой отдельный словарь,
и кроме того, производится запись и заголовков столбцов с помощью метода writeheader(), а в метод csv.DictWriter в качестве второго параметра
передается набор столбцов.
При чтении строк, используя названия столбцов, мы можем обратиться к отдельным значениям внутри строки: .
НазадВперед
File Positions
The tell() method tells you the current position within the file; in other words, the next read or write will occur at that many bytes from the beginning of the file.
The seek(offset) method changes the current file position. The offset argument indicates the number of bytes to be moved. The from argument specifies the reference position from where the bytes are to be moved.
If from is set to 0, it means use the beginning of the file as the reference position and 1 means use the current position as the reference position and if it is set to 2 then the end of the file would be taken as the reference position.
Example
Let us take a file foo.txt, which we created above.
#!/usr/bin/python # Open a file fo = open("foo.txt", "r+") str = fo.read(10) print "Read String is : ", str # Check current position position = fo.tell() print "Current file position : ", position # Reposition pointer at the beginning once again position = fo.seek(0, 0); str = fo.read(10) print "Again read String is : ", str # Close opend file fo.close()
This produces the following result −
Read String is : Python is Current file position : 10 Again read String is : Python is
Способ 2
В качестве хитрого способа создать список в одну строку можно использовать генераторы.
import os import shutil import glob # перейти в папаку RandomFiles os.chdir('./RandomFiles') # добавить все файлы в данной папке в список all_files = # создать множество расширений имен файлов в этой папке file_types = set((os.path.splitext(f) for f in all_files)) for ftype in file_types: new_directory = ftype.replace(".", '') os.mkdir(new_directory) for fname in glob.glob(f'*.{ftype}'): shutil.move(fname, new_directory)
Оба варианта сработают, и все ваши файлы будут отсортированы по расширению.
ManageFiles/ | |_create_random_files.py |_RandomFiles/ |_doc |_docx |_html |_md |_odt |_ppt
Вот и все. Если вам когда-либо понадобится отсортировать файлы таким образом, вы сэкономите немало времени . Код упражнения доступен здесь.
Шаг 4 — Запись файла
На этом этапе мы запишем новый файл, который включает в себя название «Days of the Week», и дни недели. Сначала создадим переменную title.
files.py
title = 'Days of the Weekn'
Также нужно сохранить дни недели в строковой переменной days. Открываем файл в режиме чтения, считываем файл и сохраняем вывод в новую переменную days.
files.py
path = '/users/sammy/days.txt' days_file = open(path,'r') days = days_file.read()
Теперь, когда у нас есть переменные для названия и дней недели, запишем их в новый файл. Сначала нужно указать расположение файла. Мы будем использовать каталог /users/sammy/. Также нужно указать новый файл, который мы хотим создать. Фактический путь будет /users/sammy/new_days.txt. Мы записываем его в переменную new_path. Затем открываем новый файл в режиме записи, используя функцию open() с режимом w.
files.py
new_path = '/users/sammy/new_days.txt' new_days = open(new_path,'w')
Если файл new_days.txt уже существовал до открытия, его содержимое будет удалено, поэтому будьте осторожны при использовании режима «w».
Когда новый файл будет открыт, поместим в него данные, используя <file>.write(). Операция write принимает один параметр, который должен быть строкой, и записывает эту строку в файл.
Если хотите записать новую строку в файл, нужно указать символ новой строки. Мы записываем в файл заголовок, за которым следуют дни недели.
iles.py
new_days.write(title) print(title) new_days.write(days) print(days)
Всякий раз, когда мы заканчиваем работу с файлом, нужно его закрыть. Мы покажем это в заключительном шаге.
Открытие файла
Python предоставляет функцию open(), которая принимает два аргумента: имя файла и режим доступа, в котором осуществляется доступ к файлу. Функция возвращает файловый объект, который можно использовать для выполнения различных операций, таких как чтение, запись и т. д.
Синтаксис:
file object = open(<file-name>, <access-mode>, <buffering>)
Доступ к файлам можно получить с помощью различных режимов, таких как чтение, запись или добавление. Ниже приведены подробные сведения о режимах доступа для открытия файла.
Режим доступа | Описание | |
---|---|---|
1 | r | Он открывает файл в режиме только для чтения. Указатель файла существует в начале. Файл по умолчанию открывается в этом режиме, если не передан режим доступа. |
2 | rb | Открывает файл в двоичном формате только для чтения. Указатель файла существует в начале файла. |
3 | г + | Открывает для чтения и записи. Указатель файла также существует в начале. |
4 | rb + | в двоичном формате. Указатель файла присутствует в начале файла. |
5 | w | Только для записи. Он перезаписывает файл, если он существовал ранее, или создает новый, если файл с таким именем не существует. Указатель имеется в начале файла. |
6 | wb | Открывает файл для записи только в двоичном формате. Перезаписывает файл, если он существует ранее, или создает новый, если файл не существует. Указатель файла существует в начале файла. |
7 | w + | Для записи и чтения обоих. Он отличается от r + в том смысле, что он перезаписывает предыдущий файл, если он существует, тогда как r + не перезаписывает ранее записанный файл. Он создает новый файл, если файл не существует. Указатель файла существует в начале файла. |
8 | wb + | Он открывает файл для записи и чтения в двоичном формате. Указатель файла существует в начале файла. |
9 | а | В режиме добавления. Указатель файла существует в конце ранее записанного файла, если он существует. Он создает новый файл, если не существует файла с таким же именем. |
10 | ab | В режиме добавления в двоичном формате. Указатель существует в конце ранее записанного файла. Он создает новый файл в двоичном формате, если не существует файла с таким же именем. |
11 | а + | Он открывает файл для добавления и чтения. Указатель файла остается в конце файла, если файл существует. Он создает новый файл, если не существует файла с таким же именем. |
12 | ab + | Открывает файл для добавления и чтения в двоичном формате. Указатель файла остается в конце файла. |
Давайте посмотрим на простой пример, чтобы открыть файл с именем «file.txt»(хранящийся в том же каталоге) в режиме чтения и распечатать его содержимое на консоли.
Пример:
#opens the file file.txt in read mode fileptr = open("file.txt","r") if fileptr: print("file is opened successfully")
Выход:
<class '_io.TextIOWrapper'> file is opened successfully
В приведенном выше коде мы передали filename в качестве первого аргумента и открыли файл в режиме чтения, поскольку мы упомянули r в качестве второго аргумента. Fileptr содержит объект файла, и если файл открывается успешно, он выполнит оператор печати.
Чтение CSV-файла при помощи csv.reader(). Метод 1
Пример 1. Использование запятой в качестве разделителя
Допустим, у нас есть файл с именем sample1, содержащий некоторые данные. Такой файл можно создать с помощью любого текстового редактора или путем передачи значений в какую-нибудь программу для записи файла CSV. Как это делается, мы расскажем чуть позже.
Текст в этом файле разделен запятыми. Наши данные — сведения о различных книгах (порядковый номер, название, имя автора).
Переходим к коду. Чтобы прочитать файл CSV, нам нужен объект reader для выполнения функции чтения. Первым делом импортируем модуль (встроенный модуль Python). Далее укажем имя файла, который нужно открыть (или путь к нему). Затем инициализируем объект . Он будет перебираться в цикле .
reader = csv.reader(файл)
Данные из указанного файла выводятся построчно.
Запустим наш код. Можем увидеть, что наши данные автоматически преобразовались в списки, состоящие из элементов данных каждой строки.
Пример 2. Использование табуляции в качестве разделителя
В первом примере текст разделяется запятой. Однако мы можем сделать наш код более настраиваемым, добавив различные функции.
Возьмём код из предыдущего примера и сделаем лишь одно изменение: напрямую укажем разделитель (). В предыдущем примере не было никакой необходимости его указывать, потому что запятая — разделитель по умолчанию.
reader = csv.reader(file, delimiter = ‘\t’)
Как видите, результат немного изменился. Теперь все элементы строки являются одним элементом списка. Так произошло потому, что в этот раз мы указали в качестве разделителя не запятую, а .
Запись абзацев
Для записи абзацев используйте метод add_paragraph() объекта класса Document. После добавления абзаца нужно вызвать метод save(). Путь к файлу, в который нужно записать абзац, передается в качестве параметра методу save(). Если файл не существует, то будет создан новый файл. Иначе абзац будет добавлен в конец существующего файла MS Word.
Приведенный ниже скрипт записывает простой абзац во вновь созданный файл my_written_file.docx.
mydoc.add_paragraph("This is first paragraph of a MS Word file.") mydoc.save("E:/my_written_file.docx")
После выполнения этого скрипта вы должны увидеть новый файл my_written_file.docx в каталоге, который указали в методе save(). Внутри файла должен быть один абзац, который гласит: «This is first paragraph of a MS Word file.».
Добавим в файл my_written_file.docx еще один абзац:
mydoc.add_paragraph("This is the second paragraph of a MS Word file.") mydoc.save("E:/my_written_file.docx")
Этот абзац будет добавлен в конец файла my_written_file.docx.
Запись файлов CSV
Мы также можем не только читать, но и писать любые новые и существующие файлы CSV. Запись файлов на Python осуществляется с помощью модуля csv.writer(). Он похож на модуль csv.reader() и также имеет два метода, то есть функцию записи или класс Dict Writer.
Он представляет две функции: writerow() и writerows(). Функция writerow() записывает только одну строку, а функция writerows() записывает более одной строки.
Диалекты
Они определяются как конструкция, которая позволяет создавать, хранить и повторно использовать различные параметры форматирования. Диалект поддерживает несколько атрибутов; наиболее часто используются:
- Dialect.delimiter: этот атрибут используется как разделительный символ между полями. Значение по умолчанию – запятая(,).
- Dialect.quotechar: этот атрибут используется для выделения полей, содержащих специальные символы, в кавычки.
- Dialect.lineterminator: используется для создания новых строк, значение по умолчанию – ‘\r\n’.
Запишем следующие данные в файл CSV.
data =
Пример –
import csv with open('Python.csv', 'w') as csvfile: fieldnames = writer = csv.DictWriter(csvfile, fieldnames=fieldnames) writer.writeheader() writer.writerow({'Rank': 'B', 'first_name': 'Parker', 'last_name': 'Brian'}) writer.writerow({'Rank': 'A', 'first_name': 'Smith', 'last_name': 'Rodriguez'}) writer.writerow({'Rank': 'B', 'first_name': 'Jane', 'last_name': 'Oscar'}) writer.writerow({'Rank': 'B', 'first_name': 'Jane', 'last_name': 'Loive'}) print("Writing complete")
Выход:
Writing complete
Он возвращает файл с именем Python.csv, который содержит следующие данные:
first_name,last_name,Rank Parker,Brian,B Smith,Rodriguez,A Jane,Oscar,B Jane,Loive,B
Чтение из файла Python
Чтобы осуществить чтение из файла Python, нужно открыть его в режиме чтения. Для этого можно использовать метод read(size), чтобы прочитать из файла данные в количестве, указанном в параметре size. Если параметр size не указан, метод читает и возвращает данные до конца файла.
>>> f = open("test.txt",'r',encoding = 'utf-8') >>> f.read(4) # чтение первых 4 символов 'This' >>> f.read(4) # чтение следующих 4 символов ' is ' >>> f.read() # чтение остальных данных до конца файла 'my first filenThis filencontains three linesn' >>> f.read() # дальнейшие попытки чтения возвращают пустую строку ''
Метод read() возвращает новые строки как ‘n’. Когда будет достигнут конец файла, при дальнейших попытках чтения мы получим пустые строки.
Чтобы изменить позицию курсора в текущем файле, используется метод seek(). Метод tell() возвращает текущую позицию курсора (в виде количества байтов).
>>> f.tell() # получаем текущую позицию курсора в файле 56 >>> f.seek(0) # возвращаем курсор в начальную позицию 0 >>> print(f.read()) # читаем весь файл This is my first file This file contains three lines
Мы можем прочитать файл построчно в цикле for.
>>> for line in f: ... print(line, end = '') ... This is my first file This file contains three lines
Извлекаемые из файла строки включают в себя символ новой строки ‘n’. Чтобы избежать вывода, используем пустой параметр end метода print(),.
Также можно использовать метод readline(), чтобы извлекать отдельные строки. Он читает файл до символа новой строки.
>>> f.readline() 'This is my first filen' >>> f.readline() 'This filen' >>> f.readline() 'contains three linesn' >>> f.readline() ''
Метод readlines() возвращает список оставшихся строк. Все эти методы чтения возвращают пустую строку, когда достигается конец файла.
>>> f.readlines()
Использование формата JSON
Двоичный формат данных, который использует pickle, специфичен для Python. Чтобы улучшить взаимодействие между различными программами, нотация объектов JavaScript (JSON) предоставляет простую в использовании и удобочитаемую схему и, таким образом, стала очень популярной.
В следующем примере показано, как записать список смешанных типов переменных в выходной файл с помощью модуля json. В строке 4 определен базовый список. Открыв выходной файл для записи в строке 7, метод dump() сохраняет базовый список в файле, используя JSON.
import json # define list with values basicList = # open output file for writing with open('listfile.txt', 'w') as filehandle: json.dump(basicList, filehandle)
Чтение содержимого выходного файла обратно в память так же просто, как запись данных. Соответствующий метод для dump() называется load() и работает следующим образом:
import json # open output file for reading with open('listfile.txt', 'r') as filehandle: basicList = json.load(filehandle)
The file Object Attributes
Once a file is opened and you have one file object, you can get various information related to that file.
Here is a list of all attributes related to file object −
Sr.No. | Attribute & Description |
---|---|
1 |
file.closed Returns true if file is closed, false otherwise. |
2 |
file.mode Returns access mode with which file was opened. |
3 |
file.name Returns name of the file. |
4 |
file.softspace Returns false if space explicitly required with print, true otherwise. |
Example
#!/usr/bin/python # Open a file 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
This produces the following result −
Name of the file: foo.txt Closed or not : False Opening mode : wb Softspace flag : 0
Как закрыть файл в Python?
Закрытие освободит ресурсы, которые были связаны с файлом. Это делается с помощью метода close(), встроенного в язык программирования Python.
В 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: # выполнение операций с файлом
Методы, связанные с файлом
Существуют следующие методы для управления файлами в различных операционных системах.
Метод | Описание | |
---|---|---|
1 | file.close() | Закрывает открытый файл. Когда файл закрывается, его больше нельзя читать или писать. |
2 | File.fush() | Он очищает внутренний буфер. |
3 | File.fileno() | Возвращает дескриптор файла, используемый базовой реализацией для запроса ввода-вывода из ОС. |
4 | File.isatty() | Он возвращает true, если файл подключен к устройству TTY, в противном случае возвращает false. |
5 | File.next() | Возвращает следующую строку из файла. |
6 | File.read() | Читает файл указанного размера. |
7 | File.readline() | Он считывает одну строку из файла и помещает указатель файла в начало новой строки. |
8 | File.readlines() | Возвращает список, содержащий все строки файла. Читает файл до тех пор, пока не произойдет EOF, используя функцию readline(). |
9 | File.seek(offset[,from) | Он изменяет положение указателя файла на указанное смещение с указанной ссылкой. |
10 | File.tell() | Возвращает текущую позицию указателя файла в файле. |
11 | File.truncate() | Он урезает файл до желаемого размера. |
12 | File.write(str) | Записывает указанную строку в файл. |
13 | File.writelines(seq) | Он записывает последовательность строк в файл. |
Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.
The need for “open with” statement
Before going into the “with statement” we need to understand the requirement behind it. For that, we first need to know how to open a file in python.
In python to read or write a file, we need first to open it and python provides a function open(), which returns a file object. Using this file object, we can read and write in the file. But in the end, we need to close the file using this same.
Check out this example,
# open a file file_object = open('sample.txt') # read the file content data = file_object.read() # print file content print(data) #close the file file_object.close()
This is a sample file. It contains some sample string. you are going to use it. Thanks.
FileNotFoundError: No such file or directory: 'sample.txt'
In the above example, we opened a file sample.txt using open() function, which returned a file object. Then read file’s content as string using file object’s read() function. Then printed that and in the end closed this file using the same file object.
This will work fine in typical scenarios, but there can be problems in some situations like,
What if someone forgets to close the file in the end?
Well, it seems highly impossible now, but in big projects, people usually do big stuff after opening files, and it includes many conditions and checks. So, there can be scenarios when the return statement hit before close() function gets called, or it got skipped sue to some if condition in code.
Well, in scenarios like these, till we don’t call the close() function, the file will remain open, and its object will be consuming the memory of our process. Also, there might be chances that data will not entirely be flushed to the file. Closing a file using close() function is a graceful way of closing the file.
What if an exception comes?
Check out this code
# File is not closed in case of exception try: # open a file file_object = open('sample.txt') # read file content data = file_object.read() # It will raise an exception x = 1 / 0 print(data) file_object.close() except: # Handling the exception print('An Error') finally: if file_object.closed == False: print('File is not closed') else: print('File is closed')
An Error File is not closed
# File is not closed in case of exception try: # open a file file_object = open('sample.txt') # read file content data = file_object.read() # It will raise an exception x = 1 / 0 print(data) file_object.close() except: file_object.close() # Handling the exception print('An Error') finally: if file_object.closed == False: print('File is not closed') else: print('File is closed')
Модуль PyYAML¶
Для работы с YAML в Python используется модуль PyYAML. Он не входит в
стандартную библиотеку модулей, поэтому его нужно установить:
pip install pyyaml
Работа с ним аналогична модулям csv и json.
Чтение из YAML
Попробуем преобразовать данные из файла YAML в объекты Python.
Файл info.yaml:
- BS 1550 IT 791 id 11 name Liverpool to_id 1 to_name LONDON - BS 1510 IT 793 id 12 name Bristol to_id 1 to_name LONDON - BS 1650 IT 892 id 14 name Coventry to_id 2 to_name Manchester
Чтение из YAML (файл yaml_read.py):
import yaml from pprint import pprint with open('info.yaml') as f templates = yaml.safe_load(f) pprint(templates)
Результат:
$ python yaml_read.py
Формат YAML очень удобен для хранения различных параметров, особенно,
если они заполняются вручную.
Запись в YAML
Запись объектов Python в YAML (файл yaml_write.py):
import yaml trunk_template = 'switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan' access_template = 'switchport mode access', 'switchport access vlan', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable' to_yaml = {'trunk' trunk_template, 'access' access_template} with open('sw_templates.yaml', 'w') as f yaml.dump(to_yaml, f, default_flow_style=False) with open('sw_templates.yaml') as f print(f.read())
Файл sw_templates.yaml выглядит таким образом:
access - switchport mode access - switchport access vlan - switchport nonegotiate - spanning-tree portfast - spanning-tree bpduguard enable trunk - switchport trunk encapsulation dot1q - switchport mode trunk - switchport trunk native vlan 999 - switchport trunk allowed vlan
Добавление изображений
Чтобы добавить в файлы MS Word изображения, используется метод add_picture(). Путь к изображению передается как параметр метода add_picture(). Также можно указать ширину и высоту изображения с помощью атрибута docx.shared.Inches().
Приведенный ниже скрипт добавляет изображение из локальной файловой системы в файл my_written_file.docx. Ширина и высота изображения будут 5 и 7 дюймов:
mydoc.add_picture("E:/eiffel-tower.jpg", width=docx.shared.Inches(5), height=docx.shared.Inches(7)) mydoc.save("E:/my_written_file.docx")
После выполнения всех скриптов, рассмотренных в этой статье, окончательный файл my_written_file.docx должен выглядеть следующим образом:
Он должен содержать три абзаца, три заголовка и одно изображение.
2: Открытие файла
Создайте сценарий files.py в текстовом редакторе и для простоты сохраните его в тот же каталог (/users/8host/).
Чтобы открыть файл в Python, нужно связать файл на диске с переменной Python. Сначала сообщите Python, где находится нужный файл. Чтобы открыть какой-либо файл, Python должен знать путь к этому файлу. Путь к файлу days.txt выглядит так: /users/8host/days.txt.
В файле files.py создайте переменную path и укажите в ней путь к файлу days.txt.
Теперь можно использовать функцию open(), чтобы открыть файл days.txt. В качестве первого аргумента функция open() требует путь к файлу, который нужно открыть. Эта функция имеет много других параметров. Одним из основных параметров является режим; это опциональная строка, которая позволяет выбрать режим открытия файла:
- ‘r’: открыть файл для чтения (опция по умолчанию).
- ‘w’: открыть файл для записи.
- ‘x’: создать новый файл и открыть его для записи.
- ‘a’: вставить в файл.
- ‘r+’: открыть файл для чтения и записи.
Попробуйте открыть файл для чтения. Для этого создайте переменную days_file и задайте в ней опцию open() и режим ‘r’, чтобы открыть файл days.txt только для чтения.