Работа с текстовыми файлами в Python
Вопросы для отчета
1. Что такое файл?
2. С помощью каких команд файл открывается, какие есть параметры у этих команд?
3. Почему надо обязательно закрывать файл и какой командой это можно сделать.
4. Как производится чтение в текстовом файле, какие есть параметры у соответствующих команд?
5. Как производится запись в текстовый файл, какие есть параметры у соответствующих команд?
Теоретическая справка
Для открытия файла будем использовать функцию open
f = open('text.txt', 'r')
Первый аргумент функции путь к файлу, который может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
Режим | Обозначение |
'r' | открытие на чтение (является значением по умолчанию). |
'w' | открытие на запись, содержимое файла удаляется, если файла не существует, создается новый. |
'x' | открытие на запись, если файла не существует, иначе исключение. |
'a' | открытие на дозапись, информация добавляется в конец файла. |
'b' | открытие в двоичном режиме. |
't' | открытие в текстовом режиме (является значением по умолчанию). |
'+' | открытие на чтение и запись |
Режимы могут быть объединены, то есть, к примеру, 'rb' - чтение в двоичном режиме. По умолчанию режим равен 'rt'. И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.
Для чтения информации из файла есть несколько способов.
Первый – метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).
>>> f = open('text.txt')
>>> f.read(1)
'H'
>>> f.read()
'ello world!\nThe end.\n\n'
Можно прочитать файл построчно c помощью метода readline, или воспользовавшись циклом for:
>>> f = open('text.txt')
>>> for line in f:
... line
...
'Hello world!\n'
'\n'
'The end.\n'
'\n
Запись в файл осуществляется с помощью метода write:
>>>
>>> for index in l:
... f.write(index + '\n')'
После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:
>>> f.close()
Решение задач
Задание 1. Текстовый файл состоит не более чем из 106 символов A, B и C. Определите максимальное количество повторов любого из символов. Для выполнения этого задания следует написать программу. Ниже приведён файл, который необходимо обработать с помощью данного алгоритма.
Решение:
s=[]
k=1
f=open('224.txt', 'r')
a=f.read()
n=len(a)
for i in range(n-2):
if a[i]==a[i+1]:
k+=1
else:
s.append(k)
k=1
f.close()
k=max(s)
print(k)
Исправьте программу, чтобы она считала сколько в файле цепочек “ABC”.
Задание 2. Организовать ввод данных файл до тех пор, пока не будет введена пустая строка.
fname = input('Файл: ')
f = open(fname,'w')
while True:
s = input()
if s == '': break
f.write(s+'\n')
f.close()
Исправьте программу, чтоб окончанием ввода был «0», а также выполнялся подсчет строк и символов в файле.
f = open('text.txt')
line = 0
for i in f:
line += 1
flag = 0
word = 0
for j in i:
if j!= ' ' and flag == 0:
word += 1
flag = 1
elif j == ' ':
flag = 0
print(i,len(i),'симв.',word,'сл.')
print(line,'стр.')
f.close()
Задание для самостоятельной работы.
1.Напишите программу, которая сравнивает два файла между собой, сначала количество символов, а затем содержание. Результаты сверки записывает в отдельный файл.
2.Системный администратор раз в неделю создаёт архив пользовательских файлов. Известно, какой объём занимает файл каждого пользователя. По заданной информации об объёме файлов пользователей и свободном объёме на архивном диске определите максимальное число пользователей, чьи файлы можно сохранить в архиве, а также максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.
Запишите в ответе два числа: сначала наибольшее число пользователей, чьи файлы могут быть помещены в архив, затем максимальный размер имеющегося файла, который может быть сохранён в архиве, при условии, что сохранены файлы максимально возможного числа пользователей.
Пример входного файла:
100 4
При таких исходных данных можно сохранить файлы максимум двух пользователей. Возможные объёмы этих двух файлов 30 и 40, 30 и 50 или 40 и 50. Наибольший объём файла из перечисленных пар — 50, поэтому ответ для приведённого примера:
2 50
Пояснение:
Сначала считаем в массив данные из файла. После этого отсортируем массив в порядке возрастания. Таким образом, последовательно складывая элементы массива с начала и сравнивая сумму с размером свободного места на диске получим максимальное количество пользователей, чьи файлы могут поместиться на диске. Далее, вычитая из найденной суммы наибольший файл в текущей последовательности, будем пробовать прибавлять файлы с большим весом. Если такой файл будет найден, то заменяем значение наибольшего файла, который возможно поместить на диск.
3. В имеющемся текстовом файле, содержащем набор чисел, удалите все четные числа и замените кратные 3 на нуль.
4. Дан текстовый файл, замените в нем каждое третье предложение на «Привет!».
Пояснение:
Считываем содержание файла. Преобразовываем его в список по предложениям (точка является знакоразделителем). Заменяем каждый третий элемент списка. Записываем список построчно в файл.