Основы работы с файлами в python

Открытие файла с помощью функции 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 только для чтения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector