Python Урок 9. Работа с файлами

Поділитись

На уроке рассматривается работа с файлами в Питон: текстовые и бинарные файлы, запись в файл и чтение из файла

Файлы в Python

В целом различают два типа файлов (и работы с ними):

  • текстовые файлы со строками неопределенной длины;
  • двоичные (бинарные) файлы (хранящие коды таких данных, как, например, рисунки, звуки, видеофильмы);

Этапы работы с файлом:

  1. открытие файла;
    • режим чтения,
    • режим записи,
    • режим добавления данных.
  2. работа с файлом;
  3. закрытие файла.

В python открыть файл можно с помощью функции open с двумя параметрами:

  • имя файла (путь к файлу);
  • режим открытия файла:
  • «r» – открыть на чтение,
  • «w» – открыть на запись (если файл существует, его содержимое удаляется),
  • «a» – открыть на добавление.

В коде это выглядит следующим образом:

Fin = open ( «input.txt» )
Fout = open ( «output.txt», «w» ) # работа с файлами Fout.close() Fin.close()

РАБОТА С ТЕКСТОВЫМИ ФАЙЛАМИ В ПИТОН

  • Чтение из файла происходит двумя способами:
    1. построчно с помощью метода 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 лет

Необходимо записать в текстовый файл самого старшего и самого младше


Поділитись