Python. Работа с файлами
Для того, чтобы открыть файл, в Python предусмотрена команда «open». Она может открывать как бинарные, так и текстовые файлы. У нее два параметра: имя файла и режим открытия. Например:
f = open('text.txt', 'r')
откроет файл с именем “text.txt” для чтения.
Существуют следующие режимы открытия файла:
· На чтение “r”
· На запись “w”. Если файл существует, он будет перезаписан.
· На запись нового файла “x”. Если файл уже есть, выскочит исключение.
· На дозапись “a”. Информация будет добавлена в конец файла.
· В двоичном режиме “b”.
· В текстовом режиме “t”.
· На чтение и запись “+”.
Режимы можно комбинировать, например, если вы хотите открыть бинарник на чтение, то нужно использовать “rb”. Если вы хотите открыть текстовый файл, то “t” можно опустить, это является режимом по умолчанию.
Примеры работы с текстовым файлом вы можете посмотреть в цикле уроков «Взлом шифров»:
· https://wiki.programstore.ru/python-vzlom-shifrov/
· https://wiki.programstore.ru/python-vzlom-shifrov-prodolzhenie/
· https://wiki.programstore.ru/python-vzlom-shifrov-prodolzhenie-2/
Теперь разберем еще примеры.
Чтение списка файлов из каталога с заданными расширениями и поиск в них заданной строки:
#Подключаем модуль import os #Каталог из которого будем брать файлы directory = 'd:\\1' #Получаем список файлов в переменную files files = os.listdir(directory) #Задаем строку поиска search_str="body" for file in files: filename, file_extension = os.path.splitext(file) s=file_extension.lower() if s==".txt" or s==".html" or s==".htm": f = open(directory+"\\"+file) for line in f: if line.find(search_str)>-1: print("В файле "+file+" найдена строка "+search_str) break
Здесь для чтения списка файлов в каталоге используем модуль «os», его же и для распарсивания имени файла на расширение и собственно имя. Результат работ что-то вроде того:
В файле 1.html найдена строка body
Теперь попробуем сохранить в файле данные в json-формате:
import json numbers = [2, 3, 5, 7, 11, 13] filename = 'numbers1.json' with open(filename, 'w') as f_obj: json.dump(numbers, f_obj)
Как прочитать? Вот так:
import json filename = 'numbers.json' with open(filename) as f_obj: numbers=json.load(f_obj) print(numbers)
Если открыть этот файл, то мы увидим нечто вот такое:
[2, 3, 5, 7, 11, 13]
А если попробовать записать более сложную структуру:
import json numbers = [2, 3, 5, 7, 11, 13] dic1={"proba1":1,"probs2":2,"proba3":{"proba4":(1,2),"proba5":5},"proba6":4} dic={"numbers":numbers,"proba":1,"dictionary":dic1} filename = 'numbers2.json' with open(filename, 'w') as f_obj: json.dump(dic, f_obj)
То и сам получены файл будет больше похож на истинный JSON:
{«numbers»: [2, 3, 5, 7, 11, 13], «proba»: 1, «dictionary»: {«proba1»: 1, «probs2»: 2, «proba3»: {«proba4»: [1, 2], «proba5»: 5}, «proba6»: 4}}
Ну и напоследок, сериализация в бинарные файлы:
import pickle numbers = [2, 3, 5, 7, 11, 13] dic1={"proba1":1,"probs2":2,"proba3":{"proba4":(1,2),"proba5":5},"proba6":4} dic={"numbers":numbers,"proba":1,"dictionary":dic1} filename = 'pickle.dat' with open(filename, 'wb') as f_obj: pickle.dump(dic, f_obj)
А прочитать можно вот так:
import pickle filename = 'pickle.dat' with open(filename, 'rb') as f_obj: dic=pickle.load(f_obj) print(dic)
Comments
So empty here ... leave a comment!