Файлы в Python
В целом различают два типа файлов (и работы с ними):
- текстовые файлы со строками неопределенной длины;
- двоичные (бинарные) файлы (хранящие коды таких данных, как, например, рисунки, звуки, видеофильмы);
- открытие файла;
- режим чтения,
- режим записи,
- режим добавления данных.
- работа с файлом;
- закрытие файла.
В python открыть файл можно с помощью функции open с двумя параметрами:
- имя файла (путь к файлу);
- режим открытия файла:
- «r» – открыть на чтение,
- «w» – открыть на запись (если файл существует, его содержимое удаляется),
- «a» – открыть на добавление.
В коде это выглядит следующим образом:
Fin = open ( "input.txt" ) Fout = open ( "output.txt", "w" ) # работа с файлами Fout.close() Fin.close() |
Работа с текстовыми файлами в Питон
- Чтение из файла происходит двумя способами:
- построчно с помощью метода readline:
- метод read читает данные до конца файла:
- Для получения отдельных слов строки используется метод split, который по пробелам разбивает строку на составляющие компоненты:
- способ:
- способ:
- В python метод write служит для записи строки в файл:
- Запись в файл можно осуществлять, используя определенный
шаблон вывода. Например: - Аналогом «паскалевского» eof (если конец файла) является обычный способ использования цикла while или с помощью добавления строк в список:
- подходящий способ для Python:
файл input.txt:
1
2
3
str1 = Fin.readline() # str1 = 1 str2 = Fin.readline() # str2 = 2 |
файл input.txt:
1
2
3
str = Fin.read() ''' str = 1 2 3 ''' |
str = Fin.readline().split() print(str[0]) print(str[1]) |
В файле записаны два числа. Необходимо суммировать их.
файл input.txt:
12 17
ответ:
27
✍ Решение:
Fin = open ( "D:/input.txt" ) str = Fin.readline().split() x, y = int(str[0]), int(str[1]) print(x+y) |
... x, y = [int(i) for i in s] print(x+y) |
* Функция int преобразует строковое значение в числовое.
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).
while True: str = Fin.readline() if not str: break |
Fin = open ( "input.txt" ) lst = Fin.readlines() for str in lst: print ( str, end = "" ) Fin.close() |
for str in open ( "input.txt" ): print ( str, end = "" ) |
Считать из файла 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") # запись с каждой строки нового числа |
В файле записаны в целые числа. Найти максимальное и минимальное число и записать в другой файл.
В файле записаны в столбик целые числа. Отсортировать их по возрастанию суммы цифр и записать в другой файл.
Рассмотрим на примере обработку строковых значений.
В файл записаны сведения о сотрудниках некоторой фирмы в виде:
Иванов 45 бухгалтер
Необходимо записать в текстовый файл сведения о сотрудниках, возраст которых меньше 40.
✍ Решение:
- Поскольку сведения записаны в определенном формате, т.е. вторым по счету словом всегда будет возраст, то будем использовать метод split, который разделит слова по пробелам. Под номером 1 в списке будет ити возраст:
- Более короткая запись будет выглядеть так:
- Программа выглядит так:
- Но лучше в стиле Python:
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]) |
for st in open ( "input.txt" ): intAge = int (st.split()[1]) if intAge < 40: Fout.write (st) |
В файл записаны сведения о детях детского сада:
Иванов иван 5 лет
Необходимо записать в текстовый файл самого старшего и самого младшего.
Пример:
В файле записаны два числа. Необходимо суммировать их.
файл input.txt:
12 17
ответ:
27
Исправьте: ответ 29