Советы

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

Главная / Блог / Работа с файлами в Python

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

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

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

В качестве примера работы с файлами на ПК мы будем использовать war_and_peace.txt (начало романа Л. Н. Толстого «Война и мир»), который разместим в папке скрипта.

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

Пример – Интерактивный режим

>>> file = open('war_and_peace.txt')
>>> file.read(50)
†Eh bien, mon prince. Gênes et Lucques ne s
>>> file.read()
Тут выведется оставшаяся часть текста…
>>> file.read()
Получим пустую строку
>>> file.close()
Рассмотрим подробнее проделанные операции.

1. Мы открыли файл 'war_and_peace.txt' и присвоили его переменной file.

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

Обратите внимание на сам текст: в нем угадываются французские слова и непонятные кракозябры (к слову, у вас могут отобразиться совсем другие символы). Вывод: с кодировкой беда. Так как мы ее не задали явно, определилась та, которая задана системно. В приведенном выше примере функция open() открыла роман в кодировке cp1251. Но, у самого файла она другая – utf-8. 3. В конце мы закрыли файловый объект, чтобы он не занимал место в памяти. Нам повезло, что до момента закрытия файла не случилось ошибки, иначе он бы так и остался открытым и занимал некоторый объем памяти. Чтобы случайно не забыть закрыть файл, функция open() может открываться при помощи контекстного менеджера. Лучше пользоваться всегда таким способом как рекомендуемым разработчиками.

Попытаемся еще раз открыть файл, указав кодировку, режим (на чтение обозначается буквой r).

Пример – Интерактивный режим

>>> with open('war_and_peace.txt', 'r', encoding='utf-8') as file:
txt = file.read()
>>> txt[:50]
ufeff— Eh bien, mon prince. Gênes et Lucques ne sont p
>>> txt[:50]
ufeff— Eh bien, mon prince. Gênes et Lucques ne sont p
В данном случае код вне контекстного менеджера выполняется после закрытия файлового объекта и очистки памяти (даже если бы возникла ошибка). Переменная txt имеет тип строка. В ней сохранились не только буквы и знаки препинания, но и все скрытые символы (перевод на новую строку, отступы и т.п.). Так как эта переменная хранит строку, то мы к ней можем обращаться любое количество раз.

Существует второй способ чтения файла целиком: через метод readlines(). Он возвращает список строк. Строки идентифицируются по символу '
'
.

Пример – Интерактивный режим

>>> with open('war_and_peace.txt', 'r', encoding='utf-8') as file:
txt = file.readlines()
>>> txt[0]
«ufeff— Eh bien, mon prince. Gênes et Lucques ne sont plus que des apanages, des поместья, de la famille Buonaparte. Non, je vous préviens que si vous ne me dites pas que nous avons la guerre, si vous vous permettez encore de pallier toutes les infamies, toutes les atrocités de cet Antichrist (ma parole, j'y crois) — je ne vous connais plus, vous n'êtes plus mon ami, vous n'êtes plus мой верный раб, comme vous dites 1. Ну, здравствуйте, здравствуйте. Je vois que je vous fais peur 2, садитесь и рассказывайте.
»

Здесь мы вывели на печать первую строку файла.Итак, теперь текст отображается правильно. Но, имеется еще один неприятный момент, на который не каждый обратит внимание. Наш файл – достаточно мал по объему. Поэтому мы оправданно присвоили всё его содержимое одной переменной. В случае огромных объектов (например, HD-фильм или база данных на сотню миллионов пользователей) это чревато переполнением памяти и возникновением ошибок. Работа с файлами в PythonК счастью, файловый объект может читаться построчно при помощи readline(). Следовательно, мы можем посмотреть каждую строку тяжеловесного файла и проделать над ней какие-то операции. Выведем на печать первые 50 символов двух первых строк.

Пример – Интерактивный режим

>>> with open('war_and_peace.txt', 'r', encoding='utf8') as file:
first_line = file.readline()
second_line = file.readline()
>>> first_line[:50]
ufeff— Eh bien, mon prince. Gênes et Lucques ne sont p
>>> second_line[:50]
Так говорила в июле 1805 года известная Анна Павло

Такой способ удобен, если нам не нужен весь файл, а лишь его часть. Главный минус – мы можем не знать, сколько строк в файле. А так как readline() не выдает ошибки при окончании текста, то будет просто возвращать пустые.

Если методу readline() передать числовой аргумент, то он посчитает окончанием строки это количество символов.

Чтение по строкам можно провести обычной итерацией в цикле по файловому объекту. Это может понадобиться, если нам требуется провести какие-то преобразования в каждой строке, но нужно прекратить их по окончании файла.
with open('war_and_peace.txt', 'r', encoding='utf8') as file:
for line in file:
print(line[:15].lower())

— eh bien, mon
так говорила в
«si vous n'avez
— dieu, quelle
он говорил на т
— avant tout di
— как можно быт
— а праздник ан
— я думала, что
— ежели бы знал
— ne me tourmen
— как вам сказа
князь василий г
быть энтузиастк

В примере выше мы прошлись по всем строкам текста и вывели на печать первые 15 символов каждой строки в нижнем регистре.

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

Функция open() позволяет не только читать файлы, но и записывать. Для этого требуется сменить режим на w и использовать метод write(). К слову, этот метод принимает только строку в качестве аргумента. Запишем в файл четные числа от 2 до 19 (каждое число – в отдельную строку).

Пример – Интерактивный режим

>>> with open('even.txt', 'w', encoding='utf8') as file:
for num in range(2, 20, 2):
file.write(str(num))

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

Пример – Интерактивный режим

>>> with open('even.txt', 'w', encoding='utf8') as file:
for num in range(2, 20, 2):
file.write(str(num) + '
')
Вот теперь файл выглядит так, как мы запланировали.

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

Повторим задачу с ее использованием.

Пример – Интерактивный режим

>>> with open('even.txt', 'w', encoding='utf8') as file:
for num in range(2, 20, 2):
print(num, file=file)
По умолчанию функция print() выводит информацию (в большинстве случаев текстовую) в поток STDOUT на устройство отображения (монитор). В нашем случае мы его перенаправляем на файловый объект(поток) file.Используя методику записи в файл нужно понимать, что если файла нет – то он создается, если же он есть, то все его содержимое удаляется и перезаписывается. А, вдруг, вы забыли переименовать документ и случайно переписали его содержимое? Мало приятного.

Избежать такой беды можно использованием режима x.

Пример – Интерактивный режим

>>> with open('even.txt', 'x', encoding='utf8') as file:
for num in range(2, 20, 2):
print(num, file=file)

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

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

Пример – Интерактивный режим

>>> with open('even.txt', 'x', encoding='utf8') as file:
for num in range(2, 20, 2):
print(num, file=file)

В документе even.txt теперь имеются все четные числа от 2 до 100.

В статье приведены базовые основы работы с файлами Python на примере функции open(). Она намного сложнее, имеет дополнительные режимы, позволяет взаимодействовать не только с текстовыми документами формата txt, но и любыми другими типами данных (картинками, медиафайлами, excel-таблицами, html-страницами и т.д.).

Как вам материал?

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

Функция open. Чтение и запись текстовых файлов в Python

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

Читайте также:  Зарплаты в ИТ: подводим итоги первого квартала 2023 года

Бывают еще байтовые (бинарные) файлы, которые рассматриваются как потоки байтов. Побайтово считываются, например, файлы изображений. Работа с бинарными файлами несколько сложнее. Нередко их обрабатывают с помощью специальных модулей Python (pickle, struct).

Функция open

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

Обычно используются режимы чтения ('r') и записи ('w'). Если файл открыт в режиме чтения, то запись в него невозможна. Можно только считывать данные. Если файл открыт в режиме записи, то в него можно только записывать данные, считывать нельзя.

Если файл открывается в режиме 'w', то все данные, которые в нем были до этого, стираются. Файл становится пустым. Если не надо удалять существующие в файле данные, тогда следует использовать вместо режима записи, режим дозаписи ('a').

Если файл отсутствует, то открытие его в режиме 'w' создаст новый файл. Бывают ситуации, когда надо гарантировано создать новый файл, избежав случайной перезаписи данных существующего.

В этом случае вместо режима 'w' используется режим 'x'. В нем всегда создается новый файл для записи. Если указано имя существующего файла, то будет выброшено исключение.

Потери данных в уже имеющемся файле не произойдет.

Если при вызове open() второй аргумент не указан, то файл открывается в режиме чтения как текстовый файл. Чтобы открыть файл как байтовый, дополнительно к букве режима чтения/записи добавляется символ 'b'. Буква 't' обозначает текстовый файл. Поскольку это тип файла по умолчанию, то обычно ее не указывают.

Нельзя указывать только тип файла, то есть open(«имя_файла», 'b') есть ошибка, даже если файл открывается на чтение. Правильно – open(«имя_файла», 'rb'). Только текстовые файлы мы можем открыть командой open(«имя_файла»), потому что и 'r' и 't' подразумеваются по-умолчанию.

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

Чтение файла

С помощью файлового метода read() можно прочитать файл целиком или только определенное количество байт. Пусть у нас имеется файл data.txt с таким содержимым:

one — 1 — I
two — 2 — II
three — 3 — III
four — 4 — IV
five — 5 — V

Откроем его и почитаем:

>>> f1 = open('data.txt')
>>> f1.read(10)
'one — 1 — '
>>> f1.read()
'I
two — 2 — II
three — 3 — III
four — 4 — IV
five — 5 — V
'
>>> f1.read()
''
>>> type(f1.read())

Сначала считываются первые десять символов. Последующий вызов read() считывает весь оставшийся текст. После этого объект файлового типа f1 становится пустым.

Заметим, что метод read() возвращает строку, и что конец строки считывается как '
'.

Для того, чтобы читать файл построчно существует метод readline():

>>> f1 = open('data.txt')
>>> f1.readline()
'one — 1 — I
'
>>> f1.readline()
'two — 2 — II
'
>>> f1.readline()
'three — 3 — III
'

Метод readlines() считывает сразу все строки и создает список:

>>> f1 = open('data.txt')
>>> f1.readlines()
['one — 1 — I
', 'two — 2 — II
', 'three — 3 — III
', 'four — 4 — IV
', 'five — 5 — V
']

Объект файлового типа относится к итераторам. Из таких объектов происходит последовательное извлечение элементов. Элементами в данном случае являются строки-линии файла. Поэтому считывать данные из файла можно сразу в цикле без использования методов чтения:

>>> for i in open('data.txt'):
… print(i)

one — 1 — I

two — 2 — II

three — 3 — III

four — 4 — IV

five — 5 — V

>>>

Здесь выводятся лишние пустые строки, потому что функция print() преобразует '
' в переход на новую строку. К этому добавляет свой переход на новую строку. Создадим список строк файла без '
':

>>> nums = []
>>> for i in open('data.txt'):
… nums.append(i[:-1])

>>> nums
['one — 1 — I', 'two — 2 — II', 'three — 3 — III', 'four — 4 — IV', 'five — 5 — V']

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

Запись в файл

Запись в файл выполняется с помощью методов write() и writelines(). Во второй можно передать структуру данных:

>>> l = ['tree', 'four']
>>> f2 = open('newdata.txt', 'w')
>>> f2.write('one')
3
>>> f2.write(' two')
4
>>> f2.writelines(l)

Метод write() возвращает количество записанных символов.

Закрытие файла

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

>>> f1.close()
>>> f1.closed
True
>>> f2.closed
False

Если файл открывается в заголовке цикла (for i in open('fname')), то видимо интерпретатор его закрывает при завершении работы цикла или через какое-то время.

Практическая работа

  1. Создайте файл data.txt по образцу урока. Напишите программу, которая открывает этот файл на чтение, построчно считывает из него данные и записывает строки в другой файл (dataRu.txt), заменяя английские числительные русскими, которые содержатся в списке ([«один», «два», «три», «четыре», «пять»]), определенном до открытия файлов.

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

Примеры решения и дополнительные уроки в pdf-версии курса

Чтение данных из файла и запись в файл

В Python, чтобы создать файл, надо его открыть в режиме записи ('w', 'wb') или дозаписи ('a', 'ab').

f2 = open(«text2.txt», 'w')

Функция open() возвращает файловый объект.

Без 'b' создается текстовый файл, представляющий собой поток символов. С 'b' — файл, содержащий поток байтов.

В Python также существует режим 'x' или 'xb'. В этом режиме проверяется, есть ли файл. Если файл с определенным именем уже существует, он не будет создан. В режиме 'w' файл создается заново, старый при этом теряется.

>>> f1 = open('text1.txt', 'w')
>>> f2 = open('text1.txt', 'x')
Traceback (most recent call last):
File «», line 1, in
FileExistsError: [Errno 17] File exists: 'text1.txt'
>>> f3 = open('text1.txt', 'w')

Чтение данных из файла

Если в функцию open() не передается второй аргумент, файл расценивается как текстовый и открывается на чтение.

Попытка открыть на чтение несуществующий файл вызывает ошибку.

>>> f = open(«text10.txt»)
Traceback (most recent call last):
File «», line 1, in
IOError: [Errno 2] No such file or directory: 'text10.txt'

Перехватить возникшее исключение можно с помощью конструкции try-except.

>>> try:
… f = open(«text10.txt»)
… except IOError:
… print («No file»)

No file

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

>>> f = open(«text.txt»)
>>> f

>>> fd = f.read()
>>> fd1 = f.read()
>>> fd
'Hello
One
Two
Three Four
Шесть!
'
>>> fd1
''

Если файл был открыт в текстовом режиме, то метод read() возвращает строку. В случае бинарного режима возвращается объект типа bytes.

>>> f = open('text.txt', 'rb')
>>> content = f.read()
>>> type(content)

>>> content
b'HelloHello'
>>> content[0]
72
>>> chr(content[0])
'H'

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

>>> f = open(«text.txt»)
>>> fd = f.read(10)
>>> fd1 = f.read(5)
>>> fd
'Hello
One'
>>> fd1
'
T'

Метод readline() позволяет получать данные построчно.

>>> f = open(«text.txt»)
>>> f.readline()
'Hello
'
>>> f.readline()
' One
'
>>> f.readline()
' Two
'

Принимает аргумент — число байт или символов.

>>> f.readline(3)
'Thr'
>>> f.readline(3)
'ee '
>>> f.readline(3)
'Fou'
>>> f.readline(3)
'r
'
>>> f.readline(5)
'Шесть'
>>> f.readline(5)
'!
'

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

>>> f = open('text.txt')
>>> for line in f:
… print(line, end='')

Hello!
The second line.
>>> f.close()

Метод readlines() считывает все строки и помещает их в список.

>>> f = open(«text.txt»)
>>> fd = f.readlines()
>>> fd
['Hello
', ' One
', ' Two
', 'Three Four
', 'Шесть!
']

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

>>> f = open(«text.txt»)
>>> fd = f.readlines(3)
>>> fd
['Hello
']
>>> fd1 = f.readlines(6)
>>> fd1
[' One
', ' Two
']

Запись данных в файл

Записать данные в файл можно с помощью метода write(), который возвращает число записанных символов или байтов.

Читайте также:  Что такое градиент цели

>>> ft = open('text1.txt', 'w')
>>> fb = open('text2.txt', 'wb')
>>> t = 'Привет Мир!'
>>> b = b'Hello World!'
>>> type(t), type(b)
(, )
>>> ft.write(t)
11
>>> fb.write(b)
12
>>> ft.close()
>>> fb.close()
>>>
>>> import os.path
>>> os.path.getsize('text1.txt')
20
>>> os.path.getsize('text2.txt')
12
>>> open('text2.txt').read()
'Hello World!'

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

>>> a = [1, 2, 3, 4]
>>> sa = str(a)
>>> sa
'[1, 2, 3, 4]'
>>> f = open('mylist.txt', 'w')
>>> f.write(sa)
12
>>> f.close()
>>>
>>> with open('mylist.txt') as f:
… sa = f.read()

>>> sa
'[1, 2, 3, 4]'
>>> list(sa) # bad idea
['[', '1', ',', ' ', '2', ',', ' ', '3', ',', ' ', '4', ']']
>>> a = [int(i) for i in sa if i.isdigit()]
>>> a
[1, 2, 3, 4]

С помощью метода writelines() можно записать в файл итерируемую последовательность.

>>> a = [1,2,3,4,5,6,7,8,9,0]
>>> f = open(«text2.txt»,'w')
>>> f.writelines(«%s
» % i for i in a)
>>> f.close()
>>> open(«text2.txt»).read()
'1
2
3
4
5
6
7
8
9
0
'
>>> print(open(«text2.txt»).read())
1
2
3
4
5
6
7
8
9
0

Смена позиции в файле

Метод tell() возвращает текущую позицию в файле. Позицию можно менять с помощью метода seek().

>>> f = open('text.txt')
>>> f.tell()
0
>>> f.readline()
'Hello!
'
>>> f.tell()
7
>>> f.seek(5)
5
>>> f.read(1)
'!'
>>> f.tell()
6
>>> f.read()
'
The second line.
'
>>> f.read()
''
>>> f.seek(0)
0
>>> f.read()
'Hello!
The second line.
'

В случае бинарных файлов в метод seek() можно передавать второй аргумент, который указывает, с какого места выполняется смещение, указанное в первом аргументе: 0 (по умолчанию) — от начала файла, 1 — с текущей позиции, 2 — с конца.

>>> f = open('text.txt', 'rb')
>>> f.read()
b'Hello!
The second line.
'
>>> f.seek(-6, 2)
18
>>> f.read(4)
b'line'
>>> f.seek(0)
0
>>> f.read(5)
b'Hello'
>>> f.seek(2, 1)
7
>>> f.read(3)
b'The'

Закрытие файла

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

С помощью closed (не константа, а так называемый дескриптор, или описатель, данных) проверяют, закрыт файл или нет.

>>> f = open('text.txt')
>>> f.closed
False
>>> f.close()
>>> f.closed
True

Считается хорошей практикой использовать оператор with при обработке файловых объектов. После того как тело with завершит работу, файл автоматически будет закрыт.

При работе with создается так называемый контекстный менеджер, представляющий собой особый объект.

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

>>> with open('text.txt') as f:
… print(f.read())

HelloHello
>>> f.closed
True >>> with open('text.txt') as fr, open('text2.txt', 'w') as fw:
… fw.write(fr.read())

10
>>> fw.closed
True
>>> with (
… open('text.txt') as fr,
… open('text2.txt', 'w') as fw,
… ):
… fw.write(fr.read())

10

Двоичные файлы

Пример копирования изображения:

>>> f1 = open('flag.png', 'rb')
>>> f2 = open('flag2.png', 'wb')
>>> f2.write(f1.read())
446
>>> f1.close()
>>> f2.close()

Модуль struct позволяет преобразовывать данные к бинарному виду и обратно.

>>> f = open('text3.txt', 'wb')
>>> f.write('3')
Traceback (most recent call last):
File «», line 1, in
TypeError: 'str' does not support the buffer interface
>>> d = struct.pack('>i',3)
>>> d
b'x00x00x00x03'
>>> f.write(d)
4
>>> f.close()
>>> f = open('text3.txt')
>>> d = f.read()
>>> d
'x00x00x00x03'
>>> struct.unpack('>i',d)
Traceback (most recent call last):
File «», line 1, in
TypeError: 'str' does not support the buffer interface
>>> f = open('text3.txt', 'rb')
>>> d = f.read()
>>> d
b'x00x00x00x03'
>>> struct.unpack('>i',d)
(3,)

Работа с текстовыми файлами в Python 3 | 8HOST.COM

6 ноября, 2016 12:13 пп 28 389 views | Комментариев нет

Python | Amber

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

Для примера представим программу Python, которая проверяет список пользователей для контроля доступа. Список пользователей, вероятно, будет храниться в текстовом файле. Ещё один пример: программа для выполнения финансового анализа получает вводные данные из сохраненной таблицы. Как видите, вне зависимости от приложения, входные и выходные данные задействованы практически всегда.

В данном руководстве речь идёт о типах форматов, которые поддерживает Python 3. Также руководство научит вас обрабатывать текстовые файлы.

Требования

Для выполнения руководства вам понадобится предварительно настроенная среда Python 3. Все необходимые инструкции вы найдёте в следующих статьях:

  • Ubuntu 16.04 или Debian 8
  • CentOS 7
  • Mac OS X
  • Windows 10

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

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

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

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

1: Создание текстового файла

Сначала нужно создать тестовый файл для работы. Откройте текстовый редактор и создайте файл days.txt. Добавьте в новый файл список дней недели:

  • Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
  • Sunday

Сохраните файл и запомните его местонахождение (это нужно для дальнейшей работы). В данном случае файл будет храниться в каталоге /users/8host/days.txt.

2: Открытие файла

Создайте сценарий files.py в текстовом редакторе и для простоты сохраните его в тот же каталог (/users/8host/).

Чтобы открыть файл в Python, нужно связать файл на диске с переменной Python. Сначала сообщите Python, где находится нужный файл. Чтобы открыть какой-либо файл, Python должен знать путь к этому файлу. Путь к файлу days.txt выглядит так: /users/8host/days.txt.

В файле files.py создайте переменную path и укажите в ней путь к файлу days.txt.

path = '/users/8host/days.txt'

Теперь можно использовать функцию open(), чтобы открыть файл days.txt. В качестве первого аргумента функция open() требует путь к файлу, который нужно открыть. Эта функция имеет много других параметров. Одним из основных параметров является режим; это опциональная строка, которая позволяет выбрать режим открытия файла:

  • ‘r’: открыть файл для чтения (опция по умолчанию).
  • ‘w’: открыть файл для записи.
  • ‘x’: создать новый файл и открыть его для записи.
  • ‘a’: вставить в файл.
  • ‘r+’: открыть файл для чтения и записи.

Попробуйте открыть файл для чтения. Для этого создайте переменную days_file и задайте в ней опцию open() и режим ‘r’, чтобы открыть файл days.txt только для чтения.

days_file = open(path,'r')

3: Чтение файла

Теперь вы можете работать с файлом. В зависимости от режима, в котором открыт файл, вы можете выполнить в нём те или иные действия. Для чтения информации Python предлагает три взаимосвязанные операции.

Первая операция – .read(). Она возвращает все содержимое файла в виде одной строки.

days_file.read()
'Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
'

Вторая операция – .readline(), которая возвращает содержимое файла построчно.

  1. days_file.readline()
    'Monday
    '
  2. Прочитав первую строку файла, операция readline при следующем запуске выведет вторую строку.
  3. days_file.readline()
    'Tuesday
    '

Третья операция – .readlines(), она возвращает список строк, где строки представлены в виде отдельных элементов.

days_file.readlines()
['Monday
', 'Tuesday
', 'Wednesday
', 'Thursday
', 'Friday
', 'Saturday
', 'Sunday
']

Читая файлы в Python, важно помнить следующее: если файл был прочитан с помощью одной из операций чтения, его нельзя прочитать снова. К примеру, если вы запустили days_file.read(), а затем days_file.readlines(), вторая операция вернёт пустую строку. Потому нужно открывать новую переменную файла всякий раз, когда вы хотите прочитать данные из файла.

4: Запись в файл

Теперь попробуйте создать новый файл, который будет включать заголовок Days of the Week.  Сначала создайте переменную title в файле files.py.

title = 'Days of the Week
'

Сохраните дни недели в строковой переменной days. Ниже показан код из всех вышеупомянутых разделов (чтобы было понятнее); файл открывается в режиме чтения, выходные данные операции чтения сохраняются в новой переменной days.

  • path = '/users/8host/days.txt'
    days_file = open(path,'r')
  • days = days_file.read()

В файле есть переменные для заголовка и содержимого файла days. Теперь можно записать данные в новый файл. Сначала укажите местонахождение файла (/users/8host/), затем – название нового файла (например, new_days.txt). Путь к новому файлу можно указать в переменной new_path. Чтобы открыть новый файл для записи, используйте функцию open() с параметром ‘w’.

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

Примечание: Если файл с таким именем (new_days.txt) уже существует, при открытии в режиме ‘w’ его содержимое пострадает.

Читайте также:  ТОП-10 запросов MySQL

Функция откроет файл, после чего вы можете записать в него данные с помощью операции .write(). Операции записи необходим всего один параметр – строка, которую нужно записать в файл. Чтобы начать новую строку в файле, нужно явно использовать символ новой строки. Запишите в файл files.py заголовок и добавьте пару операторов print.

new_days.write(title)
print(title)
new_days.write(days)

  1. print(days)
  2. После этого нужно закрыть файл.

5: Закрытие файла

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

days_file.close()
new_days.close()

6: Проверка кода

Прежде чем запустить сценарий files.py, убедитесь, что его содержимое выглядит так:

path = '/users/8host/days.txt'
days_file = open(path,'r')
days = days_file.read()
new_path = '/users/8host/new_days.txt'
new_days = open(new_path,'w')
title = 'Days of the Week
'
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. Если всё работает должным образом, файл будет выглядеть так:

  1. Days of the Week
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
  2. Sunday

Заключение

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

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

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

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

Открыть файл в Питон можно с помощью команды

with open(“file.ext”, mode) as name: имя перменной файла

with, open и as это ключевые слова. Команда open() открывает файл с именем “file” с разрешением файла “ext”. Параметр mode отвечает за режим открытия файла. Необходимо указать полный путь к файлу, причем используются двойные слеши. например открытие файла на чтение 

with open(«C:UsersuserDesktopWinPythonsettingsdata.txt»,»r») as f:

Существуют различные режимы работы с файлом в python.

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

Название и расширение файла пишется в кавычках, расширение файла пишется после названия файла через точку, режим открытия файла пишется в кавычках. Разберем все режимы работы с файлом в Python

Чтение из файла в Python

 Разберём режим чтения из файла “r”. Создайте новую программу в Spyder, сохраните её на Рабочем столе.  Создайте на рабочем столе текстовый документ text с расширением txt. Внутри файла напишите следующий текст.  Привет! Я первая строка.  Вторая строка. Третья строка.

Чтобы вывести в программе Питон  в консоль весь файл, используется команда f.read().

Пример. Программа python,которая читает весь файл и выводит его в консоль. with open(«text.txt», «r») as f:     text = f.read()

    print(text)

Команда f.read(n) может принимать аргумент n, n это количество знаков с начала, которое будет считываться из файла. Например, если будет исполняться команда f.read(50), то программа выведет 50 знаков с начала файла. Пример. Программа в Python для считывания опредленного количества знаков with open(«text.txt», «r») as f:     text = f.read(50)

    print(text)

Если вы хотите считать текст не с начала файла, а с какого-либо символа, используйте команду f.seek(n), n это символ, с которого начнётся чтение файла. Файл начинается с нулевого символа. Пример. Программа на Python, которая счтитывает информацию из файла с начала второй строки. with open(«text.txt», «r») as f:     f.seek(27)     text = f.read(50)

    print(text)

Python позволяет считать все строки текста файла в отдельный массив с помощью команды f.readlines() Пример. Программа python выводит в консоль третью строку файла. with open(«text.txt», «r») as f:     text = f.readlines()

    print(text[2])

Для считывания строк файла используется команда f.readline()  Команда будет считывать одну строку из файла. Если использовать эту команду несколько раз, то будет считываться строка за строкой Например, если вы написали две команды f.readline(), то первая команда считает первую строку, вторая команда считает вторую строку. Пример программы python считывание строк из файла с помощью команды f.readline(). with open(«text.txt», «r») as f:     text = f.readline()     print(text)

    print(f.readline())

Часто отдельные части данных разделены каким-либо знаком. Python заменять эти знаки из строк с помощью команды f.replace(start, final), где start это знак, который надо заменить, final это знак, на который надо заменить. Пример программы, заменяющей все пробелы в строке на знак +. string = «Всем привет! Я строка.» print(string.replace(» «, «+»)) Разберём режим добавления информации в файл в Питон  “w” Для добавления информации в файл в python используется команда f.write(“text”) Эта команда удаляет весь старый текст в файле и вместо него пишет новый. После исполнения программы с этой командой зайдите в тот же файл, там не должно быть старых строк, вместо них будет текст, который вы написали в команде. Пример программа на Python запись текста в файл с использованием команды f.write(). with open(«text.txt», «w») as f:     f.write(«Текст.») Вместо этого текста Привет! Я первая строка. Вторая строка. Третья строка. Должна появиться эта строка Текст.

Чтобы написать несколько строк, используется команда f.writelines(line), где line это массив со строками, которые нужно записать в файл

Программа на Python для записи массива строк в файл with open(«text.txt», «w») as f:     f.writelines([«Первый элемент. «, «Вторая строка.»]) Разберём режим добавления информации “a”. Этот режим отличается от “w” тем, что он не удаляет старую информацию. Все команды в режиме “a” идентичны командам в режиме “w”, но в режиме “a” команды не удаляют старый текст, а записывают текст в конце файла. Часто в программах на python входная информация считывается из файла, обрабатывается и результат записывается в новый выходной файл. Разберём большой пример работы с файлами в Python. Дан текстовый файл data с двумя столбцами и десятью строками однозначных или двузначных чисел. Числа разделены пробелом. Для каждой строки нужно найти среднее этих чисел и вывести их в новый текстовый файл result. Файл data. 11 47 59 15 2 52 64 48 58 88 59 86 37 39 19 92 48 85 16 78

Введём массив для обычных строк line[], массив для строк без пробелов aC[], массив для чисел в каждом столбце a1[] и a2[] и массив res[], в котором будут находиться средние значения.

Откроем файл data.txt и считаем из него числа. Введём цикл for на 10 итераций (повторений) по количеству строк. Считаем строку под номером i с помощью команды f.readline() и запишем её в массив с индексом line[i] line[i] = f.readline() Чтобы получить доступ к каждому чилу в строке, необходимо воспользоваться методом split, который удаляет разделитель и записывает все элементы строки в массив уже без разделителя. Подробнее о работе со строками в python

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

line = {} # строки with open(«C:UsersuserDesktopWinPythonsettingsdata.txt»,»r») as f:     for i in range(10):         line[i] = f.readline()

        stroka=line[i].split(' ')

  • Чтобы получить из строки stroka числовые значения первого элемента и второго, воспользуемся функцией int(). В массив res[i] запишем среднее арифметическое двух элементов строки

       a=int(stroka[0])        b=int(stroka[1])

       res[i]=(a+b)/2

Чтобы записать все результаты в новый файл, откроем файл result.txt в режиме “a”. С помощью цикла for запишем все результаты в отдельные строки.

with open(«C:UsersuserDesktopWinPythonsettings
esult.txt», «a») as result:     for i in range(10):         res[i] = str(res[i])

        result.write(res[i] + » «)

Полный код программы python считывание числовых столбцов из файла и запись в файл столбца средних значений line = {} # строки res={} with open(«C:UsersuserDesktopWinPythonsettingsdata.txt»,»r») as f:     for i in range(10):         line[i] = f.readline()         stroka=line[i].split(' ')         a=int(stroka[0])         b=int(stroka[1])         res[i]=(a+b)/2 with open(«C:UsersuserDesktopWinPythonsettings
esult.txt», «a») as result:     for i in range(10):         res[i] = str(res[i])

        result.write(res[i] + » «)

  1. Вернуться к содержанию Следующая тема Библиотека NumPy в Python матрицы в питон

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

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