0% нашли этот документ полезным (0 голосов)
7 просмотров

Pythonlearn 07 Files

Загружено:

Nino Rcheulishvili
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PPTX, PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
7 просмотров

Pythonlearn 07 Files

Загружено:

Nino Rcheulishvili
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PPTX, PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 24

Чтение файлов

Глава 7

Пайтон для всех


www.py4e.com
Программное Пора найти Данные, с
обеспечение Что которыми можно
дальше?
поработать!
Устройства
Центральный
ввода и Файлы -
процессор это мы
вывода
Вторичная
if x < 3: print память

Основная From [email protected] Sat Jan 5 09:14:16 2008


Return-Path: <[email protected]>

память Date: Sat, 5 Jan 2008 09:12:18 -0500To:


[email protected]:
[email protected]: [sakai] svn commit: r39772 -
content/branches/Details: http://source.sakaiproject.org/viewsvn/?
view=rev&rev=39772
...
Работа с файлом
Текстовый файл можно представить как последовательность
строк:
From [email protected] Sat Jan 5 09:14:16 2008
Return-Path: <[email protected]>
Date: Sat, 5 Jan 2008 09:12:18 -0500
To: [email protected]
From: [email protected]
Subject: [sakai] svn commit: r39772 - content/branches/

Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772

http://www.py4e.com/code/mbox-short.txt
Открытие файла
• Прежде чем мы сможем прочитать содержимое файла,
нужно сообщить Пайтону, с каким файлом мы собираемся
работать и что будем с ним делать

• Функция open() служит для открытия файлов

• Функция open() возвращает «дескриптор файла» — это


переменная, используемая для операций с файлом

• Аналогично операции “Файл -> Открыть” в текстовом


редакторе
Использование open()
fhand = open('mbox.txt', 'r')
• handle = open(filename, mode)

• возвращает дескриптор для управления файлом

• имя файла (filename) — это строка

• указание режима (mode) не является обязательным,


но он должен быть 'r', если мы собираемся читать
файл, и 'w', если собираемся записывать в файл
Что такое дескриптор?
>>> fhand = open('mbox.txt')
>>> print(fhand)
<_io.TextIOWrapper name='mbox.txt' mode='r' encoding='UTF-8'>
Дескриптор

Открыть
Читать
Писать
Закрыть

Ваша программа
Когда файлы отсутствуют
>>> fhand = open('stuff.txt')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: 'stuff.txt'

Данный файл или каталог отсутствует


Символ перевода строки
>>> stuff = 'Привет,\nМир!'
• Чтобы обозначить конец >>> stuff
строки, используется 'Привет,\nМир!'
>>> print(stuff)
специальный символ Привет,
—«перевод / разрыв строки» Мир!
>>> stuff = 'X\nY'
• В строках пишется \n >>> print(stuff)
X
• Перевод строки (\n) — это Y
один символ, а не два >>> len(stuff)
3
Работа с файлом
Текстовый файл можно представить как последовательность
строк:

From [email protected] Sat Jan 5 09:14:16 2008


Return-Path: <[email protected]>
Date: Sat, 5 Jan 2008 09:12:18 -0500
To: [email protected]
From: [email protected]
Subject: [sakai] svn commit: r39772 - content/branches/

Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772
Работа с файлом
Текстовый файл содержит символ перевода строки в конце
каждой строки:
From [email protected] Sat Jan 5 09:14:16 2008\n
Return-Path: <[email protected]>\n
Date: Sat, 5 Jan 2008 09:12:18 -0500\n
To: [email protected]\n
From: [email protected]\n
Subject: [sakai] svn commit: r39772 - content/branches/\n
\n
Details: http://source.sakaiproject.org/viewsvn/?view=rev&rev=39772\n
Чтение файлов в Пайтон
Дескриптор файла как последовательность
• Дескриптор файла, открытый для
чтения, можно рассматривать как
последовательность строк, где каждая
строка файла — строка в xfile = open('mbox.txt')
последовательности for cheese in xfile:
print(cheese)
• Мы можем использовать оператор for,
чтобы последовательно перебирать
строки

• Помните: последовательность — это


упорядоченный набор
Подсчет строк в файле
• Открываем файл в режиме fhand = open('mbox.txt')
«только для чтения» count = 0
for line in fhand:
• Используем цикл с for, чтобы count = count + 1
прочесть каждую строку print('Всего строк:', count)

• Подсчитываем строки и
выводим количество строк $ python open.py
Всего строк: 132045
Чтение файла *целиком*
>>> fhand = open('mbox-short.txt')
Мы можем прочитать весь >>> inp = fhand.read()
файл (всё содержимое и >>> print(len(inp))
переводы строк) в одну 94626
строку >>> print(inp[:20])
From stephen.marquar
Поиск по файлу
С помощью оператора if
внутри цикла for можно fhand = open('mbox-short.txt')
for line in fhand:
выводить только строки,
if line.startswith('From:') :
соответствующие print(line)
определённым критериям
Ой!
From: [email protected]
Что здесь делают все
эти пустые строки? From: [email protected]

From: [email protected]

From: [email protected]
...
Ой!
Что здесь делают все From: [email protected]\n
эти пустые строки? \n
From: [email protected]\n
• В конце каждой строки \n
файла находится символ From: [email protected]\n
\n
перевода строки
From: [email protected]\n
\n
• Оператор print добавляет ...
символ перевода строки к
каждой строке
Поиск по файлу (исправленный)
• Мы можем удалить пробелы
fhand = open('mbox-short.txt')
с правой стороны строки, for line in fhand:
используя rstrip() из line = line.rstrip()
if line.startswith('From:') :
библиотеки работы со print(line)
строками
From: [email protected]
• Строка, содержащая символ
From: [email protected]
перевода строки, считается From: [email protected]
«пустым пространством» и From: [email protected]
удаляется ....
Пропуск с использованием continue

fhand = open('mbox-short.txt')
Если нужно, мы for line in fhand:
можем пропустить line = line.rstrip()
строку, используя if not line.startswith('From:') :
оператор continue continue
print(line)
Используем in, чтобы выбрать строки
Мы можем поискать fhand = open('mbox-short.txt')
for line in fhand:
подстроку в (in) любой line = line.rstrip()
строке (line), используя if not '@uct.ac.za' in line :
continue
соответствующий критерий print(line)
поиска
From [email protected] Sat Jan 5 09:14:16 2008
X-Authentication-Warning: set sender to [email protected] using –f
From: [email protected]
Author: [email protected]
From [email protected] Fri Jan 4 07:02:32 2008
X-Authentication-Warning: set sender to [email protected] using -f...
fname = input('Введите имя файла: ')
fhand = open(fname)
count = 0
Запрос имени
for line in fhand:
if line.startswith('Subject:') : файла
count = count + 1
print('Найдено', count, ‘строк, содержащих subject в', fname)

Введите имя файла: mbox.txt


Найдено 1797 строк, содержащих subject в
mbox.txt

Введите имя файла: mbox-short.txt


Найдено 27 строк, содержащих subject в
mbox-short.txt
fname = input('Введите имя файла: ')
try:

Неверное fhand = open(fname)


except:
print('Неверное имя файла:', fname)
имя файла quit()

count = 0
for line in fhand:
if line.startswith('Subject:') :
count = count + 1
print(‘Найдено', count, ‘строк, содержащих subject в', fname)

Введите имя файла: mbox.txt


Найдено 1797 строк, содержащих subject в mbox.txt

Введите имя файла: na na boo boo


Неверное имя файла: na na boo boo
Резюме
• Вторичная память

• Открытие файла, дескриптор файла

• Структура файла, символ перевода строки

• Построчное чтение файла с помощью цикла с for

• Поиск строк в файле

• Чтение имен файлов

• Неверное имя файла


Авторы / Благодарности
Авторские права на эти слайды принадлежат Чарльзу Р. ...
Северансу (www.dr-chuck.com) , 2010 г., Школа Информации
Мичиганского Университета и доступны по лицензии Creative
Commons Attribution 4.0 License. Пожалуйста, сохраняйте этот
слайд во всех копиях этого документа, в соответствии с
требованиями Лицензии. Если вы внесли изменения,
добавьте свое имя или организацию в список участников на
этой странице.

Исходная разработка: Чарльз Северанс, Школа


Информации Мичиганского Университета.

Перевод выполнила Фомкина Виолетта.

… Добавьте сюда новых авторов и переводчиков

Вам также может понравиться