Работа с файлами в python

Чтение документов MS Word

Файлы с расширением .docx обладают развитой внутренней структурой. В модуле python-docx эта структура представлена тремя различными типами данных. На самом верхнем уровне объект представляет собой весь документ. Объект содержит список объектов , которые представляют собой абзацы документа. Каждый из абзацев содержит список, состоящий из одного или нескольких объектов , представляющих собой фрагменты текста с различными стилями форматирования.

import docx

doc = docx.Document('example.docx')

# количество абзацев в документе
print(len(doc.paragraphs))

# текст первого абзаца в документе
print(doc.paragraphs.text)

# текст второго абзаца в документе
print(doc.paragraphs1.text)

# текст первого Run второго абзаца
print(doc.paragraphs1.runs.text)
6
Название документа
Простой абзац с жирным и курсивным текстом
Простой абзац с 

Получаем весь текст из документа:

text = 
for paragraph in doc.paragraphs
    text.append(paragraph.text)
print('\n'.join(text))
Название документа
Простой абзац с жирным и курсивным текстом
Заголовок, уровень 1
Выделенная цитата
Первый элемент маркированного списка
Первый элемент нумерованного списка

Стилевое оформление

В документах MS Word применяются два типа стилей: стили абзацев, которые могут применяться к объектам , стили символов, которые могут применяться к объектам . Как объектам , так и объектам можно назначать стили, присваивая их атрибутам значение в виде строки. Этой строкой должно быть имя стиля. Если для стиля задано значение , то у объекта или не будет связанного с ним стиля.

Стили символов

paragraph.style = 'Quote'
run.style = 'Book Title'

Атрибуты объекта Run

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

  • — Полужирное начертание
  • — Подчеркнутый текст
  • — Курсивное начертание
  • — Зачеркнутый текст

Изменим стили для всех параграфов нашего документа:

import docx

doc = docx.Document('example.docx')

# изменяем стили для всех параграфов
for paragraph in doc.paragraphs
    paragraph.style = 'Normal'

doc.save('restyled.docx')

А теперь восстановим все как было:

import docx

os.chdir('C:\\example')

doc1 = docx.Document('example.docx')
doc2 = docx.Document('restyled.docx')

# получаем из первого документа стили всех абзацев
styles = 
for paragraph in doc1.paragraphs
    styles.append(paragraph.style)

# применяем стили ко всем абзацам второго документа
for i in range(len(doc2.paragraphs))
    doc2.paragraphsi.style = stylesi

doc2.save('restored.docx')

Изменим форматирвание объектов второго абзаца:

import docx

doc = docx.Document('example.docx')

# добавляем стиль символов для runs
doc.paragraphs1.runs.style = 'Intense Emphasis'
# добавляем подчеркивание для runs
doc.paragraphs1.runs4.underline = True

doc.save('restyled2.docx')

Стилевое оформление

Для настройки шрифтов, используемых в ячейках, необходимо импортировать функцию из модуля :

from openpyxl.styles import Font

Ниже приведен пример создания новой рабочей книги, в которой для шрифта, используемого в ячейке , устанавливается шрифт , красный цвет, курсивное начертание и размер 24 пункта:

import openpyxl
from openpyxl.styles import Font

# создаем новый excel-файл
wb = openpyxl.Workbook()
# добавляем новый лист
wb.create_sheet(title = 'Первый лист', index = )
# получаем лист, с которым будем работать
sheet = wb'Первый лист'

font = Font(name='Arial', size=24, italic=True, color='FF0000')
sheet'A1'.font = font
sheet'A1' = 'Здравствуй мир!'

# записываем файл
wb.save('example.xlsx')

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

import openpyxl
from openpyxl.styles import NamedStyle, Font, Border, Side

# создаем новый excel-файл
wb = openpyxl.Workbook()
# добавляем новый лист
wb.create_sheet(title = 'Первый лист', index = )
# получаем лист, с которым будем работать
sheet = wb'Первый лист'

# создаем именованный стиль
ns = NamedStyle(name='highlight')
ns.font = Font(bold=True, size=20)
border = Side(style='thick', color='000000')
ns.border = Border(left=border, top=border, right=border, bottom=border)

# вновь созданный именованный стиль надо зарегистрировать
# для дальнейшего использования
wb.add_named_style(ns)

# теперь можно использовать именованный стиль
sheet'A1'.style = 'highlight'

# записываем файл
wb.save('example.xlsx')

Основа

Python может с относительной легкостью обрабатывать различные форматы файлов:

Тип файла Описание
Txt Обычный текстовый файл хранит данные, которые представляют собой только символы (или строки) и не включает в себя структурированные метаданные.
CSV Файл со значениями,для разделения которых используются запятые (или другие разделители). Что позволяет сохранять данные в формате таблицы.
HTML HTML-файл хранит структурированные данные и используется большинством сайтов
JSON JavaScript Object Notation — простой и эффективный формат, что делает его одним из часто используемых для хранения и передачи данных.

В этой статье основное внимание будет уделено формату txt

Чтение из файла 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()

Форматы файлов в Python 3

Python очень гибкий и может относительно легко обрабатывать множество различных форматов файлов. Вот основные форматы:

Формат Описание
txt Обычный текстовый файл, который хранит данные в виде символов (или строк) и исключает структурированные метаданные.
CSV Файл, который хранит данные в виде таблицы; для структурирования хранимых данных используются запятые (или другие разделители).
HTML Файл Hypertext Markup Language хранит структурированные данные; такие файлы используются большинством сайтов.
JSON Простой файл JavaScript Object Notation, один из наиболее часто используемых форматов для хранения и передачи данных.

Данное руководство рассматривает только формат txt.

Открытие файла Python

Не знаете как открыть файл в питоне? В 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') # чтение и запись в бинарном формате

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

Кодировка по умолчанию зависит от платформы. В Windows – это ‘cp1252’, а в Linux ‘utf-8’.

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

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

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

Python предлагает различные методы для чтения и записи файлов, где каждая функция ведет себя по-разному. Следует отметить один важный момент – режим работы с файлами. Чтобы прочитать файл, вам нужно открыть файл в режиме чтения или записи. В то время, как для записи в файл на Python вам нужно, чтобы файл был открыт в режиме записи.

Вот некоторые функции Python, которые позволяют читать и записывать файлы:

  • read() – эта функция читает весь файл и возвращает строку;
  • readline() – эта функция считывает строки из этого файла и возвращает их в виде строки. Он выбирает строку n, если она вызывается n-й раз.
  • readlines() – эта функция возвращает список, в котором каждый элемент представляет собой одну строку этого файла.
  • readlines() – эта функция возвращает список, в котором каждый элемент представляет собой одну строку этого файла.
  • write() – эта функция записывает фиксированную последовательность символов в файл.
  • Writelines() – эта функция записывает список строк.
  • append() – эта функция добавляет строку в файл вместо перезаписи файла.

Возьмем пример файла «abc.txt» и прочитаем отдельные строки из файла с помощью цикла for:

#open the file
text_file = open('/Users/pankaj/abc.txt','r')

#get the list of line
line_list = text_file.readlines();

#for each line from the list, print the line
for line in line_list:
    print(line)

text_file.close() #don't forget to close the file

Вывод:

Теперь, когда мы знаем, как читать файл в Python, давайте продвинемся вперед и выполним здесь операцию записи с помощью функции Writelines().

#open the file
text_file = open('/Users/pankaj/file.txt','w')

#initialize an empty list
word_list= []

#iterate 4 times
for i in range (1, 5):
    print("Please enter data: ")
    line = input() #take input
    word_list.append(line) #append to the list


text_file.writelines(word_list) #write 4 words to the file

text_file.close() #don’t forget to close the file

Вывод

Закрытие

Если для открытия текстового документа применяется метод open() то, логично, для закрытия – close(). Это надо делать всегда, если программа не будет с ним больше работать. Если этого не сделать, его след останется в оперативной памяти, и компьютер может начать работать медленнее. В случае с маленькими файлами это не критично, а что если придется открывать большой?

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

Есть несколько способов осуществления закрытия.

Способ 1

Наиболее легкий способ – просто закрыть файл после того, как с ним будет произведено последнее действие. 

f = open(‘example.txt’,’r’)

# процессы, выполняемые над файлом

f.close()

Пока его снова не открыть средствами программы, она уже ничего не сможет с ним сделать, если выполнить последнюю инструкцию.

Способ 2

Приведенный выше способ прост, но имеет недостаток. Если возникает какая-то ошибка, это может привести к сбою в работе программы. Чтобы обработать ошибки при открытии файла, используется комбинация try/finally. В таком случае, если что-то пойдет не так, то программа просто закроет файл, а не аварийно завершит свою работу. 

Вот код, как это делается.

f = open(‘example.txt’,’r’)

try:

   # работа с файлом

finally:

   f.close()

Открытие файла должно осуществиться до того, как создается конструкция try/finally. Потом пишется try, и это начинается обработчик ошибок. Далее пишутся инструкции по работе с этим файлом, после чего finally записывается, и тогда файл закрывается. То есть, синтаксис обработчика стандартный, и ничем принципиально не отличается.

Способ 3

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

with open(‘example.txt’) as f:

    # работа с файлом

🔸 Как прочитать файл

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

Это основной синтаксис:

Мы просто назначаем значение, возвращенное в переменную. Например:

names_file = open("data/names.txt", "r")

Я знаю, что вы можете спросить: какую ценность возвращается Открыть () ?

Ну, А Файл объект Отказ

Давайте немного поговорим о них.

Файловые объекты

Согласно , а Файл объект является:

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

Файловые объекты имеют атрибуты, такие как:

  • Имя : имя файла.
  • закрыто : Если файл закрыт. иначе.
  • Режим : Режим, используемый для открытия файла.

Например:

f = open("data/names.txt", "a")
print(f.mode) # Output: "a"

Теперь давайте посмотрим, как вы можете получить доступ к содержите файла через файл объекта.

Методы для чтения файла

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

Читать()

Первый метод, который вам нужно узнать о том, это , который Возвращает все содержимое файла в виде строки.

Здесь у нас есть пример:

f = open("data/names.txt")
print(f.read())

Вывод:

Nora
Gino
Timmy
William

Вы можете использовать Функция, чтобы подтвердить, что значение, возвращенное это строка:

print(type(f.read()))

# Output

Да, это строка!

В этом случае весь файл был напечатан, потому что мы не указываем максимальное количество байтов, но мы можем сделать это также.

Здесь у нас есть пример:

f = open("data/names.txt")
print(f.read(3))

Возвращенная стоимость ограничена этим количеством байтов:

Nor

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

Для этого вам нужно позвонить в Метод, как это:

Readline () vs. readleines ()

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

readline () Читает одна линия файла, пока он не достигнет конца этой линии. Персонаж Craining Newline ( ) хранится в строке.

Совет: Необязательно, вы можете пройти размер, максимальное количество символов, которые вы хотите включить в результирующую строку.

Например:

f = open("data/names.txt")
print(f.readline())
f.close()

Вывод:

Nora

Это первая строка файла.

Напротив, Readleines () Возвращает Список со всеми линиями файла как отдельные элементы (строки). Это синтаксис:

Например:

f = open("data/names.txt")
print(f.readlines())
f.close()

Вывод:

Обратите внимание, что есть (Новый символ) в конце каждой строки, кроме последнего. Совет: Вы можете получить тот же список с Отказ

Совет: Вы можете получить тот же список с Отказ

Вы можете работать с этим списком в вашей программе, назначая его переменной или используя ее в цикле:

f = open("data/names.txt")

for line in f.readlines():
    # Do something with each line
    
f.close()

Мы также можем итерации за Прямой (объект файла) в цикле:

f = open("data/names.txt", "r")

for line in f:
	# Do something with each line

f.close()

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

Генератор случайных файлов

Создадим папку , а внутри нее еще одну — . Дерево каталогов теперь должно выглядеть вот так:

ManageFiles/
 |
 |_RandomFiles/

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

ManageFiles/
 |
 |_ create_random_files.py
 |_RandomFiles/

Готово? Теперь поместите в файл следующий код, и перейдем к его рассмотрению:

import os
from pathlib import Path
import random

list_of_extensions = 

# перейти в папку RandomFiles
os.chdir('./RandomFiles')

for item in list_of_extensions:
    # создать 20 случайных файлов для каждого расширения имени
    for num in range(20):
        # пусть имя файла начинается со случайного числа от 1 до 50
        file_name = random.randint(1, 50)
        file_to_create = str(file_name) + item
        Path(file_to_create).touch()

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

Сперва создадим
список файловых расширений для формирования названий файлов. Не стесняйтесь
добавить туда свои варианты.

Далее мы переходим в папку и запускаем цикл. В нем мы просто говорим: возьми каждый элемент и сделай с ним кое-что во внутреннем цикле 20 раз.

Теперь пришло время для импортированной функции . Используем ее для производства случайных чисел от 1 до 50. Это просто не очень творческий способ побыстрее дать названия нашим тестовым файлам: к сгенерированному числу добавим расширение файла и получим что-то вроде или . И так 20 раз для каждого расширения. В итоге образуется беспорядок, достаточный для того, чтобы его было лень сортировать вручную.

Итак, запустим
наш генератор хаоса через терминал.

python create_random_files.py

Поздравляю,
теперь у нас полная папка неразберихи. Будем распутывать.

В той же директории, где , создадим файл и поместим туда следующий код.

Шаг 6 — Проверка кода

Конечный результат должен выглядеть примерно так:

files.py

path = '/users/sammy/days.txt'
days_file = open(path,'r')
days = days_file.read()


new_path = '/users/sammy/new_days.txt'
new_days = open(new_path,'w')

title = 'Days of the Weekn'
new_days.write(title)
print(title)

new_days.write(days)
print(days)

days_file.close()
new_days.close()

После сохранения кода откройте терминал и запустите свой Python- скрипт, например:python files.py

Результат должен выглядеть так:

Вывод
Days of the Week

Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Теперь проверим код полностью, открыв файл new_days.txt. Если все пройдет хорошо, когда мы откроем этот файл, его содержимое должно выглядеть следующим образом:

new_days.txt

Days of the Week
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday

Модули для чтения и записи

Модуль CSV имеет несколько функций и классов, доступных для чтения и записи CSV, и они включают в себя:

  • функция csv.reader
  • функция csv.writer
  • класс csv.Dictwriter
  • класс csv.DictReader

csv.reader

Модуль csv.reader принимает следующие параметры:

  • : обычно это объект, который поддерживает протокол итератора и обычно возвращает строку каждый раз, когда вызывается его метод .
  • : необязательный параметр, используемый для определения набора параметров, специфичных для определенного диалекта CSV.
  • : необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.

Вот пример того, как использовать модуль csv.reader.

модуль csv.writer

Этот модуль похож на модуль csv.reader и используется для записи данных в CSV. Требуется три параметра:

  • : это может быть любой объект с методом .
  • : необязательный параметр, используемый для определения набора параметров, специфичных для конкретного CSV.
  • : необязательный параметр, который можно использовать для переопределения существующих параметров форматирования.

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 только для чтения.

Извлечение текста с помощью PyMuPDF

Перейдём к PyMuPDF.

Отображение информации о документе, печать количества страниц и извлечение текста из документа PDF выполняется аналогично PyPDF2 (см. скрипт ниже). Импортируемый модуль имеет имя , что соответствует имени PyMuPDF в ранних версиях.

import fitz

pdf_document = "./source/Computer-Vision-Resources.pdf"
doc = fitz.open(pdf_document)
print("Исходный документ: ", doc)
print("\nКоличество страниц: %i\n\n------------------\n\n" % doc.pageCount)
print(doc.metadata)

for current_page in range(len(doc)):
    page = doc.loadPage(current_page)
    page_text = page.getText("text")
    print("Стр. ", current_page+1, "\n\nСодержание;\n")
    print(page_text)

Извлечение текста с помощью PyMuPDF

Приятной особенностью PyMuPDF является то, что он сохраняет исходную структуру документа без изменений — целые абзацы с разрывами строк сохраняются такими же, как в PDF‑документе.

The read() Method

The read() method reads a string from an open file. It is important to note that Python strings can have binary data. apart from text data.

Syntax

fileObject.read()

Here, passed parameter is the number of bytes to be read from the opened file. This method starts reading from the beginning of the file and if count is missing, then it tries to read as much as possible, maybe until the end of file.

Example

Let’s 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
# Close opend file
fo.close()

This produces the following result −

Read String is :  Python is

The write() Method

The write() method writes any string to an open file. It is important to note that Python strings can have binary data and not just text.

The write() method does not add a newline character (‘\n’) to the end of the string −

fileObject.write(string)

Here, passed parameter is the content to be written into the opened file.

Example

#!/usr/bin/python

# Open a file
fo = open("foo.txt", "wb")
fo.write( "Python is a great language.\nYeah its great!!\n")

# Close opend file
fo.close()

The above method would create foo.txt file and would write given content in that file and finally it would close that file. If you would open this file, it would have following content.

Python is a great language.
Yeah its great!!

Концепт пути и директории в Python

Перед началом подробного рассмотрения модуля Pathlib важно разобраться в разнице между главными концептами темы — путем (path) и директорией (directory)

  • Путь используется для идентификации файла. Путь предоставляет необязательную последовательность названий директорий, в конце которой значится конечное имя файла, а также его расширение;
  • Расширение названия файла предоставляет некоторую информацию о формате/содержимом файла. Модуль Pathlib может работать как с абсолютными, так и с относительными путями;
  • Абсолютный путь начинается с корневой директории и определяет полное дерево каталогов;
  • Относительный путь, как следует из названия, является путем к файлу относительно другого файла или директории, обычно текущей;
  • Директория представляет собой запись пути в файловой системе и включает название файла, время создания, размер, владельца и так далее.

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

Настройка строк и столбцов

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

Настройка высоты строк и ширины столбцов

Объекты имеют атрибуты и , которые управляют высотой строк и шириной столбцов.

sheet'A1' = 'Высокая строка'
sheet'B2' = 'Широкий столбец'

sheet.row_dimensions1.height = 70
sheet.column_dimensions'B'.width = 30

Атрибуты s и представляют собой значения, подобные словарю. Атрибут содержит объекты , а атрибут содержит объекты . Доступ к объектам в осуществляется с использованием номера строки, а доступ к объектам в — с использованием буквы столбца.

Для указания высоты строки разрешено использовать целые или вещественные числа в диапазоне от 0 до 409. Для указания ширины столбца можно использовать целые или вещественные числа в диапазоне от 0 до 255. Столбцы с нулевой шириной и строки с нулевой высотой невидимы для пользователя.

Объединение ячеек

Ячейки, занимающие прямоугольную область, могут быть объединены в одну ячейку с помощью метода рабочего листа:

sheet.merge_cells('A1:D3')
sheet'A1' = 'Объединены двенадцать ячеек'

sheet.merge_cells('C5:E5')
sheet'C5' = 'Объединены три ячейки'

Чтобы отменить слияние ячеек, надо вызвать метод :

sheet.unmerge_cells('A1:D3')
sheet.unmerge_cells('C5:E5')

Закрепление областей

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

У объекта имеется атрибут , значением которого может служить объект или строка с координатами ячеек. Все строки и столбцы, расположенные выше и левее, будут заблокированы.

Значение атрибута freeze_panes Заблокированные строки и столбцы
Строка 1
Столбец A
Столбцы A и B
Строка 1 и столбцы A и B
Закрепленные области отсутствуют

Чтение данных из файла с помощью Python

Допустим, вы (или ваш пользователь посредством вашего приложения) поместили данные в файл, и ваш код должен их получить. Тогда перед вами стоит цель – прочитать файл. Логика чтения такая же, как логика записи:

  1. Открыть файл
  2. Прочесть данные
  3. Закрыть файл

Опять же, этот логический поток отражает то, что вы и так делаете постоянно, просто используя компьютер (или читая книгу, если на то пошло). Чтобы прочитать документ, вы открываете его, читаете и закрываете. С компьютерной точки зрения «открытие» файла означает загрузку его в память.

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

f = open('example.tmp', 'r')

for line in f:
    print(line)

f.close()

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

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

Чтение файла с использованием конструкции with

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

with open('example.txt', 'r') as f:
    for line in f:
        print(line)

Использование модуля pickle

Различные методы, описанные до сих пор, хранят список таким образом, чтобы люди могли его прочитать. Если в этом нет необходимости, модуль pickle может вам пригодиться. Его метод dump() эффективно сохраняет список, как поток двоичных данных. Во-первых, в строке 7 (в приведенном ниже коде) выходной файл listfile.data открывается для двоичной записи («wb»). Во-вторых, в строке 9 список сохраняется в открытом файле с помощью метода dump():

# load additional module
import pickle

# define a list of places
placesList = 

with open('listfile.data', 'wb') as filehandle:
    # store the data as binary data stream
    pickle.dump(placesList, filehandle)

В качестве следующего шага мы читаем список из файла следующим образом. Во-первых, файл listfile.data открывается двоичный файл для чтения («rb») в строке 4. Во-вторых, список мест загружается из файла с помощью метода load().

# load additional module
import pickle

with open('listfile.data', 'rb') as filehandle:
    # read the data as binary data stream
    placesList = pickle.load(filehandle)

Два примера здесь демонстрируют использование строк. Хотя, pickle работает со всеми видами объектов Python, такими как строки, числа, самоопределяемые структуры и любые другие встроенные структуры данных, которые предоставляет Python.

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

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

Adblock
detector