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


Объекты типа 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’, при этом все содержимое файла удалbтся. И записываем в него слово ‘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]


Списки

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

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

animal = ["Бобер", 2.6, 5]

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

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

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]

N = [1, 12, 123, 1234, 12345, 123456]

Nechet = [a for a in N if a % 2 > 0]

#Nechet = [a for a in N if a % 2]

Chet = [b for b in N if b not in Nechet]

#Chet = [b for b in N if b%2==0]

 

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

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.

Стеки

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



Дата добавления: 2022-04-12; просмотров: 186;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.013 сек.