Top.Mail.Ru

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!

Добавить комментарий

Sidebar