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

Содержание

Слайд 2

Какие бывают файлы? Файлы текстовые двоичные «plain text»: для чтения человеком

Какие бывают файлы?

Файлы

текстовые

двоичные

«plain text»:
для чтения человеком
текст, разбитый на строки;
из специальных

символов только символы перехода на новую строку

любые символы
рисунки, звуки, видео, …

12
123
1234

Слайд 3

ПРИНЦИП СЭНДВИЧА хлеб хлеб начинка Fin = open ("input.txt”) Fout =

ПРИНЦИП СЭНДВИЧА

хлеб

хлеб

начинка

Fin = open ("input.txt”)
Fout = open ("output.txt", "w”)
# здесь

работаем с файлами
Fin.close()
Fout.close()

файловые переменные-указатели

"r" - чтение
"w" – запись
"a" – добавление

по умолчанию – на чтение (режим "r")

Слайд 4

Ввод данных Fin = open("input.txt") s = Fin.readline() # "1 2"

Ввод данных

Fin = open("input.txt")

s = Fin.readline() # "1 2"

Чтение строки:

Чтение строки

и разбивка по пробелам:

s = Fin.readline().split() # ["1","2"]

Чтение целых чисел:

s = Fin.readline().split() # ["1","2"]
a, b = int(s[0]), int(s[1])

Или с помощью генератора:

a, b = [int(x) for x in s]

или так:

a, b = map(int, s)

Слайд 5

Вывод данных в файл a = 1 b = 2 Fout

Вывод данных в файл

a = 1
b = 2
Fout = open( "output.txt",

"w" )
Fout.write ( "{:d} + {:d} = {:d}\n".format(
a, b, a+b) )
Fout.close()
Слайд 6

Чтение неизвестного количества данных пока не конец файла прочитать число из

Чтение неизвестного количества данных

пока не конец файла
прочитать число из файла

добавить его к сумме

Fin = open ("input.txt")
sum = 0
while True:
s = Fin.readline()
if not s: break
sum += int(s)
Fin.close()

если конец файла, вернёт пустую строку

Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму.

Слайд 7

sum = 0 Fin = open ("input.txt") lst = Fin.readlines() for

sum = 0
Fin = open ("input.txt")
lst = Fin.readlines()
for s in lst:

sum += int(s)
Fin.close()

прочитать все строки в список строк

Чтение неизвестного количества данных

Задача. В файле записано в столбик неизвестное количество чисел. Найти их сумму.

Слайд 8

Задача. В файле записано в столбик неизвестное количество чисел. Найти их

Задача. В файле записано в столбик неизвестное количество чисел. Найти их

сумму.

sum = 0
with open ("input.txt") as Fin:
for s in Fin:
sum += int(s)

или так:

sum = 0
for s in open ("input.txt"):
sum += int(s)

Чтение неизвестного количества данных

Слайд 9

ОБРАБОТКА МАССИВОВ Задача. В файле записаны в столбик целые числа. Вывести

ОБРАБОТКА МАССИВОВ

Задача. В файле записаны в столбик целые числа. Вывести в

другой текстовый файл те же числа, отсортированные в порядке возрастания.
Слайд 10

Ввод массива: A = [] while True: s = Fin.readline() if

Ввод массива:

A = []
while True:
s = Fin.readline()
if not s:

break
A.append (int(s))

Ввод в стиле Python:

s = Fin.read().split()
A = list (map(int, s))

Сортировка:

A.sort()

ОБРАБОТКА МАССИВОВ

Слайд 11

Вывод результата: Fout = open ("output.txt", "w") Fout.write (str(A)) Fout.close() или

Вывод результата:

Fout = open ("output.txt", "w")
Fout.write (str(A))
Fout.close()

или так:

for x in A:

Fout.write (str(x)+"\n")

[1, 2, 3]

1
2
3

или так:

for x in A:
Fout.write ("{:4d}".format(x))

1 2 3

ОБРАБОТКА МАССИВОВ

Слайд 12

Обработка строк Задача. В файле записано данные о собаках: в каждой

Обработка строк

Задача. В файле записано данные о собаках: в каждой строчке

кличка собаки, ее возраст и порода: Мухтар 4 немецкая овчарка
Вывести в другой файл сведения о собаках, которым меньше 5 лет.

пока не конец файла Fin
прочитать строку из файла Fin
разобрать строку – выделить возраст
если возраст < 5 то
записать строку в файл Fout

Слайд 13

ЧТЕНИЕ ДАННЫХ ИЗ ФАЙЛА Чтение одной строки: s = Fin.readline() Разбивка

ЧТЕНИЕ ДАННЫХ ИЗ ФАЙЛА

Чтение одной строки:

s = Fin.readline()

Разбивка по пробелам:

data =

s.split()

Выделение возраста:

sAge = data[1]
age = int (sAge)

Кратко всё вместе:

s = Fin.readline()
age = int (s.split()[1])

Слайд 14

Fin = open ("input.txt") Fout = open ("output.txt", "w") while True:

Fin = open ("input.txt")
Fout = open ("output.txt", "w")
while True:
s =

Fin.readline()
if not s: break
age = int (s.split()[1])
if age < 5:
Fout.write (s)
Fin.close()
Fout.close()

Полная программа:

Обработка строк

Слайд 15

lst = Fin.readlines() for s in lst: age = int (

lst = Fin.readlines()
for s in lst:
age = int ( s.split()[1])

if age < 5:
Fout.write (s)

или так:

for s in open ("input.txt”):
age = int (s.split()[1])
if age < 5:
Fout.write (s)

или так:

Обработка строк