На уроке рассматривается работа с файлами в Питон: текстовые и бинарные файлы, запись в файл и чтение из файла
Файлы в Python
В целом различают два типа файлов (и работы с ними):
- текстовые файлы со строками неопределенной длины;
- двоичные (бинарные) файлы (хранящие коды таких данных, как, например, рисунки, звуки, видеофильмы);
Этапы работы с файлом:
- открытие файла;
- режим чтения,
- режим записи,
- режим добавления данных.
- работа с файлом;
- закрытие файла.
В python открыть файл можно с помощью функции open с двумя параметрами:
- имя файла (путь к файлу);
- режим открытия файла:
- «r» – открыть на чтение,
- «w» – открыть на запись (если файл существует, его содержимое удаляется),
- «a» – открыть на добавление.
В коде это выглядит следующим образом:
| Fin = open ( «input.txt» ) Fout = open ( «output.txt», «w» ) # работа с файлами Fout.close() Fin.close() |
РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ В ПИТОН
- Чтение из файла происходит двумя способами:
- построчно с помощью метода readline:
str1 = Fin.readline() # str1 = 1 str2 = Fin.readline() # str2 = 2
- метод read читает данные до конца файла:
str = Fin.read() ''' str = 1 2 3 '''
- Для получения отдельных слов строки используется метод split, который по пробелам разбивает строку на составляющие компоненты:
str = Fin.readline().split() print(str[0]) print(str[1])
Пример:
В файле записаны два числа. Необходимо суммировать их.
файл input.txt:
12 17
ответ:
27
- 1.способ:
Fin = open ( "D:/input.txt" ) str = Fin.readline().split() x, y = int(str[0]), int(str[1]) print(x+y)
- 2.способ:
... x, y = [int(i) for i in s] print(x+y)
- В python метод write служит для записи строки в файл:
Fout = open ( "D:/out.txt","w" )
Fout.write ("hello")
- Запись в файл можно осуществлять, используя определенный
шаблон вывода. Например:
Fout.write ( "{:d} + {:d} = {:d}\n".format(x, y, x+y) )
В таком случае вместо шаблонов {:d} последовательно подставляются значения параметров метода format (сначала x, затем y, затем x+y).
- Аналогом «паскалевского» eof (если конец файла) является обычный способ использования цикла while или с помощью добавления строк в список:
1. while True: str = Fin.readline() if not str: break 2. Fin = open ( "input.txt" ) lst = Fin.readlines() for str in lst: print ( str, end = "" ) Fin.close()
- подходящий способ для Python:
for str in open ( "input.txt" ): print ( str, end = "" )
Задание Python 9_1:
Считать из файла input.txt 10 чисел (числа записаны через пробел). Затем записать их произведение в файл output.txt.
Рассмотрим пример работы с массивами.Пример:
Считать из текстового файла числа и записать их в другой текстовый файл в отсортированном виде.
✍ Решение:
- Поскольку в Python работа с массивом осуществляется с помощью структуры список, то количество элементов в массиве заранее определять не нужно.
- Считывание из файла чисел:
lst = [] while True: st = Fin.readline() if not st: break lst.append (int(st))
- Сортировка.
- Запись отсортированного массива (списка) в файл:
- Или другой вариант записи в файл:
| Fout = open ( «output.txt», «w» ) Fout.write (str(lst)) # функция str преобразует числовое значение в символьное Fout.close() |
другой вариант ;
for x in lst:
Fout.write (str(x)+"\n") # запись с каждой строки нового числа
Задание Python 9_2:
В файле записаны в целые числа. Найти максимальное и минимальное число и записать в другой файл.Задание Python 9_3:
В файле записаны в столбик целые числа. Отсортировать их по возрастанию суммы цифр и записать в другой файл.
Рассмотрим на примере обработку строковых значений.Пример:
В файл записаны сведения о сотрудниках некоторой фирмы в виде:
Иванов 45 бухгалтер
Необходимо записать в текстовый файл сведения о сотрудниках, возраст которых меньше 40.
✍ Решение:
- Поскольку сведения записаны в определенном формате, т.е. вторым по счету словом всегда будет возраст, то будем использовать метод split, который разделит слова по пробелам. Под номером 1 в списке будет ити возраст:
| st = Fin.readline() data = st.split() stAge = data[1] intAge = int(stAge) |
- Более короткая запись будет выглядеть так:
st = Fin.readline() intAge = int(st.split()[1])
- Программа выглядит так:
while True: st = Fin.readline() if not s: break intAge = int (st.split()[1])
- Но лучше в стиле Python:
| for st in open ( «input.txt» ): intAge = int (st.split()[1]) if intAge < 40: Fout.write (st) |
Задание Python 9_4:
В файл записаны сведения о детях детского сада:
Иванов иван 5 лет
Необходимо записать в текстовый файл самого старшего и самого младше