Работа с файловой системой
Объекты типа 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;