Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


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



Объекты типа file предназначены для работы с внешними данными. Файловые объекты должны поддерживать основные методы: read(), write(), readline(), readlines(), seek(), tell(), close().

Встроенная функция

open(file, mode=’r/w/x/a/b/t/+’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) # Открывает файл и возвращает поток.

‘r’ — для чтения (выступает значением по умолчанию).

‘w’ —для записи, содержимое файла удаляется, если файла с таким именем нет, то он автоматически создается.

‘x’ — открытие на запись, если файл не существует, иначе исключение.

‘a’ — дозаписывание информации в конец существующего файла.

‘b’ — открытие в двоичном режиме.

‘t’ — открытие в текстовом режиме (выступает значением по умолчанию).

‘+’ — открытие на чтение и запись.

Кроме того, вышеперечисленные режимы могут быть объеденены. По умолчанию режим ‘rt’. Если вы хотите произвести чтение в двоичном режиме, то укажите ‘rb’.

Аргумент encoding задает кодировку и используется только в текстовом режиме чтения файла.

Пример копирования файла:

f = open(" inp. txt", " r") # открытие файла для чтения

g = open(" outp. txt", " w") # открытие файла для записи

for line in f. readlines():# построчное чтение из файла f

g. write( line) # запись строки в файл g

g. close() # закрытие файла g

f.close() # закрытие файла f

Если в аргументе метода read ничего не указать, то он выведет всю информацию. Но можно обращаться к файлу с целью побитового вывода. (вспоминаем, что кириллица занимает по 2 байта на символ). Итак, пробуем вывести первые 6 букв:

>>> f = open('file.txt', 'r')

>>> print ( f.read(12) )

Еще один способ используемый для этого цикл.

f = open('file.txt', 'r')

for line in f:

print line

f.close()

Работы с файлом, его нужно обязательно закрыть. Используем для этого метод close().

Записываем информацию в файл:

Итак, открываем файл в режиме запись ‘w’, при этом все содержимое файла удалиться. И записываем в него слово ‘string’ с помощью метода write():

f = open('file.txt', 'w')

f.write('string1\n') #\n - перенос строки

f.write('sting2')

f.close()

# Проверяем, записались ли значения

f = open('file.txt', 'r')

print ( f.read() )

f.close()

Результат:

string1

sting2

f = open('file.txt', 'w')

f.write('abvgd \ n') # \ n - перенос строки

f.seek(3) #переход на три байта

f.write('0000n') # вставляем после 3 символа и стираем все остальное

f.write('hello')

f.close()

# читаем значение построчно

f = open('file.txt', 'r')

print ( f.readline() )

f.close()

# читаем ВСЕ строки

f = open('file.txt', 'r')

print ( f.readlines() )

f.close()

Результат:

abv0000

['abv0000n', 'hello']

Вносим изменения в файл, не затронув при этом старые данные:

f = open('file.txt', 'w')

f.writelines('test')

f.close()

f = open('file.txt', 'r')

print ( f.read() )

f.close()

Результат:

abv0000

['abv0000n', 'hello']

test

Python имеет встроенные библиотеки. В этом примере сохраним в бинарном файле структуру списка, прочитать ее и сохраним строку в текстовом файле. Для преобразования структуры данных используем стандартную библиотеку «pickle»

Import pickle

mylist = ["Это" , "-", 4, 13327]

# Откроем файл C:\ b. dat для записи. Символ «r» предотвращает замену

# специальных сиволов (таких как \n, \t, \b и др.).

mf = file (r"C: \b.dat", "w")

pickle.dump(mylist, mf)

mf.close()

mf = file(r"C:\text.txt", "w")

mf.write("Это - a sample string")

myfile.close()

myfile = file (r"C:\text.txt")

print ( myfile.read() )

'This is a sample string'

myfile. close()

# Открываем файл для чтения

myfile = file(r"C:\binary.dat")

loadedlist = pickle.load(myfile)

myfile . close()

print ( loadedlist )

[' This', ' is', 4, 13327]



Списки

Для хранения группы (и однородных) объектов используются списки. Они задаются тремя способами:

· Простое перечисление. Например

a nimal = [" Бобер" , 2. 6, 5]

flower = [" Лилия" , 100, 1 00]

· Преобразование строки в список. Например

b = list("help") # b=['h', 'e', 'l', 'p']

· Создание с помощью списковых включений. Например

c=[x**2 for x in range(20) if x%3==1]

# c=[1,16,49,100,169,256,361]

 

Операторы и функции работы со списками:

len(s) – длина последовательности s

x in s – проверка принадлежности элемента последовательности или принадлежность подстроки строке.

x not in s = not x in s

s + s1 – конкатенация последовательностей

s*n или n*s – последовательность из n раз повторенной s. Если n < 0, возвращается пустая последовательность.

s[i] –i-й элемент s или len(s)+i-й, если i < 0

s[i:j:d] Срез из последовательности s от i до j с шагом

min(s) Наименьший элемент s

max(s) Наибольший элемент s

s[i] = x i-й элемент списка s заменяется на x

s[i:j:d] = t Срез от i до j (с шагом d) заменяется на (список) t

del s[i:j:d] – Удаление элементов среза из последовательности

Кроме того, для списков определен ряд методов.

append(x) – Добавляет элемент в конец последовательности

count(x) – Считает количество элементов, равных x

extend(s) – Добавляет к концу последовательности последовательность s

index(x) – Возвращает наименьшее i, такое, что s[i] == x. Возбуждает исключение ValueError, если x не найден в s

insert(i, x) – Вставляет элемент x в i-й промежуток

pop(i) – Возвращает i-й элемент, удаляя его из последовательности

reverse() – Меняет порядок элементов s на обратный

sort([cmpfunc]) – Сортирует элементы s. Может быть указана своя функция сравнения cmpfunc.

Для преобразования кортежа в список есть функция list, для обратной операции – tuple.

Стеки

Стек – упорядоченная коллекция элементов, где добавление нового или удаление существующих всегда происходит только на одном из концов. Этот конец обычно называют “вершиной”, а противоположный ему - “основанием”.

Операции над стеком

· s tack() создаёт новый пустой стек. Параметры не нужны, возвращает пустой стек.

· push(item) добавляет новый элемент на вершину стека. В качестве параметра выступает элемент; функция ничего не возвращает.

· pop() удаляет верхний элемент из стека. Параметры не требуются, функция возвращает элемент. Стек изменяется.

· peek() возвращает верхний элемент стека, но не удаляет его. Параметры не требуются, стек не модифицируется.

· isEmpty() проверяет стек на пустоту. Параметры не требуются, возвращает булево значение.

· size() возвращает количество элементов в стеке. Параметры не требуются, тип результата – целое число

Операция над стеком Содержание стека Возвращаемое значение
s.isEmpty() [] True
s.push(2) [2]  
s.push('эш') [2,'эш']  
s.peek() [2,'эш'] 'эш'
s.push(True) [2,'эш',True]  
s.size() [2,'эш',True] 3
s.isEmpty() [2,' эш ',True] False
s.push(3.14) s.push(3.14)  
s.pop() [2,' эш ',True] 3.14
s.pop() [2,' эш '] True
s.size() [2,' эш '] 2

 

Пример реализации стека:

class Stack:

def __init__(self) :

self.items=[]

def isEmpty(self) :

return self.items=[]

def push(self,item) :

self.items.append(item)

def pop(self) :

return self.items.pop()

def peek(self) :

return self.items[len(self.items)-1]

def size(self) :

return len(self.items)

from python.basic.stack import Stack

s=Stack

print(s.isEmpty

s.push(4)

s.push(‘dog’)

print(s.speek())

s.push(True)

print(s.size())

print(s.isEmpty())

print(s.pop())

print(s.pop())

print(s.size())



Множества

Множество – структура данных из различных элементов, где порядок элементов не определён. Элементы можно добавлять и удалять, перебирать. Можно выполнять операции над множествами (объединение, пересечение, разность). Можно проверять принадлежность элемента множеству.

Элементами множества могут быть с неизменяемыми типами данных: числа, строки, кортежи (неизменяемые списки). Значения с изменяемым типом не могут быть элементами множества – список (но можно сделать кортеж) или другое множество. Это связано с особенностями представления множества в памяти компьютера.

Множество задается перечислением элементов в фигурных скобках. Например:

A={1,2,3}

Функция set() создает пустое множество. Функция set с параметрами в виде списка, строки или кортежа вернет множество, составленное из элементов списка, строки, кортежа. Например:

A = set('один')

print(A)

выведет {'д', 'и', 'н', 'о'}.

Каждый элемент может входить в множество только один раз, порядок задания элементов не важен. Например, программа:

A = set('абракадабра') # A={‘ a’, ‘б’, ‘д’, ‘к’, ‘р’}

B = set('бардак') # В={‘ a’, ‘б’, ‘д’, ‘к’, ‘р’}

print(A==B)

выдаст значение True.

Примеры присвоения значений:

a= set() # a – пусто

b = {‘б’, ‘ e’, ‘р’}

c= set('хан') # с={‘х’, ‘а’, ‘н’}

d={2*i for i in range(5)} # d={0, 2, 4, 6, 8}

e=set([‘бер ’, ‘один ’, ‘один ’, ‘one’, ‘one’, ‘ein’])  # е ={‘бер ’, ‘один ’, ‘one’, ‘ein’}

Число элементов определяет функция len(a). Например:

print( len( set(‘четыре’))) # выведет число 5

Перебор вех элементов множества можно при помощи цикла for

f={1,3,4,7}

for san in f : print(san) # напечатает 7 1 4 3

Принадлежность элемента можно проверить с помощью опереации in .

print(3 in {1,3,4,7}) # напечатает True

Новый элемент добавляет метод add.

a={1,3,4,7}

a. add(6) # a= {1,3,4,6,7}

Метод pop удаляет из множества один случайный элемент, возвращая его значение. При пустом множестве генерируется исключение KeyError

Функция list из множества формирует список.

Операции с множествами:

len( s) – число элементов в множестве

x in s – принадлежность x s

s. isdisjoint( s1) – истина в случае пустого пересечения множеств

s== s1 – истина в случае совпадения множеств

s.issubset(s1) – s подмножество s1

s.issuperset(s1) – s1 подмножество s

s. union( s1, s2…) – объединение множеств

s. intersection( s1, s2,…) – пересечение s с остальными множествами

s.difference(s1,s2…) – вычитание из s подмножеств

s.simmetric_difference(s1) – исключающее или

s. copy( s1) – копирование.

Операции изменения множества:

s. update( s1, s2,…) – добавляет элементы в множестве

s. intersection_ update( s1, s2,…) – пересечение в множестве оставляет

s. difference_ update( s1, s2,…) – вычитает из множества

s. simmetric_ difference_ update( s1, s2,…) – оставляет элементы, встречающиеся только в одном множестве

s. add( b) – добавляет элемент

s. remove( b) – удаляет элемент. При удалении не существующего элемента формируется исключение KeyError.

s. discard( b) – удаляет элемент

s. pop() – удаляет случайный элемент

s. clear() – очищает множество.

Пример: Удалить все повторяющиеся элементы из списка.

a=[7,9,9,4,2,6,5,9,4] # a - множество

s= set( arr) # преобразует список во множство s=[2,4,5,7,9]

arr= list( s) # преобразует множество в список без повторений значений



Компьютерная графика

Можно рисунки формировать через псевдо графику и символы:

программа изображение
print('         ^_^') print('        (o o)') print('        / V \\') print(' _____( _ )____') ' print(' / ~~~~~^ ^~~~~~ \\') print(' ==============') print(' ===┌────┐===') print(' ===│      │===') print(' ===│      │===') print(' ===└────┘===') print(' =============') print(' _____/\\_/\\_____')           ^_^'        (o o)       / V \   _____( _ )____ / ~~~~~^ ^~~~~~ \ ============== ===┌────┐===' ===│      │=== ===│      │=== ===└────┘=== ============= ______/\_/\_____

Python работает с несколькими графическими библиотеками, обеспечивая создание сложных приложений с развитым графическим пользовательским интерфейсом. В этой презентации рассматриваются использование «черепашки» для создания графических примитивов и перемещения на плоскости.

Tkinter – кроссплатформенная библиотека, используемая в большинстве распространённых ОС (Windows, Linux, Mac OS и др.), позволяющая разрабатывать программы с графическим интерфейсом на языке Python. Tkinter расшифровывается как «Tk interface».

PyQt – мультиплатформенная библиотека, представляющая из себя набор модулей Python. Она содержит более 300 классов и почти 6000 функций и методов.

Turtle – простая библиотека языка Python, позволяющая рисовать на экране несложные элементы с помощью управления «Черепашкой», которая перемещается по экрану и поворачивается в заданных направлениях, при этом оставляя (или, по выбору, не оставляя) за собой нарисованный след с заданными цветом и шириной.

MatPlotLib – библиотека по визуализации математичесих функций.

SciPy – набор алгоритмов и функций, созданных на основе NumPy, содержащей функции высокого уровня для вычислений и визуализации даных.

PIL (Python Imaging Library) – библиотека по работе с изображениями в Python, поддерживающая:

·бинарные, полутоновые, индексированные, полноцветные и CMYK изображения;

·форматы BMP, EPS, GIF, JPEG, PDF, PNG, PNM, TIFF и некоторые другие на чтение и запись;

·множества форматов (ICO, MPEG, PCX, PSD, WMF и др.) для чтения;

·конвертирование изображений из одного формата в другой;

·редактирование изображений (использование различных фильтров, масштабирование, рисование, матричные операции и т. д.);

PyOpenGL — библиотека, позволяющая в программах на языке Python легко работать с функциями OpenGL, GLU и GLUT, а также с рядом расширений OpenGL.

pygame – библиотека модуль Python с открытым исходным кодом для разработки игр и мультимедийных приложений.

Черепашья графика

Исполнитель «черепашка» управляется командами относительных («вперёд-назад» и «направо-налево») и абсолютных («перейти в точку с координатами...») перемещений. Исполнитель представляет собой «перо», оставляющее след на плоскости рисования. Перо можно поднять, тогда при перемещении след оставаться не будет. Кроме того, для пера можно установить толщину и цвет. Все эти функции исполнителя обеспечиваются модулем turtle («черепаха»).

Приведённая программа создаёт графическое окно и помещает перо («черепашку») в исходное положение:

import turtle # Инициализация

turtle.reset() # Здесь могут быть вычисления и команды рисования

turtle._root.mainloop() # Эта команда показывает окно, пока его не закроют

Рис. Окно рисования

Полученное окно имеет фиксированный размер, зависящий от версии Python, перо позиционируется в центре. Идея рисования заключается в перемещении пера («черепашки») в точки окна рисования с указанными координатами или в указанных направлениях на заданные расстояния, а также в проведении отрезков прямых, дуг и окружностей.

 


Поделиться:



Последнее изменение этой страницы: 2019-03-21; Просмотров: 257; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.078 с.)
Главная | Случайная страница | Обратная связь