Запись в файл python: Работа с файлами в python. Чтение и запись в файл ~ PythonRu

Содержание

Работа с файлами в python. Чтение и запись в файл ~ PythonRu

Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.

Файлы Python

Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).

В Python существует два типа файлов:

  1. Текстовые
  2. Бинарные

Текстовые файлы

Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.

Текст может храниться в двух форматах: (.txt) — простой текст и (.rtf) — «формат обогащенного текста».

Бинарные файлы

В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.

Они хранятся в формате .bin.

Любую операцию с файлом можно разбить на три крупных этапа:

  1. Открытие файла
  2. Выполнение операции (запись, чтение)
  3. Закрытие файла

Открытие файла

Метод open()

В Python есть встроенная функция open(). С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.

Синтаксис следующий:

f = open(file_name, access_mode)

Где,

  • file_name = имя открываемого файла
  • access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения (r), если другое не указано. Далее полный список режимов открытия файла
РежимОписание
rТолько для чтения.
wТолько для записи. Создаст новый файл, если не найдет с указанным именем.
rbТолько для чтения (бинарный).
wbТолько для записи (бинарный). Создаст новый файл, если не найдет с указанным именем.
r+Для чтения и записи.
rb+Для чтения и записи (бинарный).
w+Для чтения и записи. Создаст новый файл для записи, если не найдет с указанным именем.
wb+Для чтения и записи (бинарный). Создаст новый файл для записи, если не найдет с указанным именем.
aОткроет для добавления нового содержимого. Создаст новый файл для записи, если не найдет с указанным именем.
a+Откроет для добавления нового содержимого. Создаст новый файл для чтения записи, если не найдет с указанным именем.
abОткроет для добавления нового содержимого (бинарный). Создаст новый файл для записи, если не найдет с указанным именем.
ab+Откроет для добавления нового содержимого (бинарный). Создаст новый файл для чтения записи, если не найдет с указанным именем.

Пример

Создадим текстовый файл example.txt и сохраним его в рабочей директории.

Следующий код используется для его открытия.

f = open('example.txt','r')  
fp = open('C:/xyz.txt','r')  

В этом примере f — переменная-указатель на файл example.txt.

Следующий код используется для вывода содержимого файла и информации о нем.

>>> print(*f) 
This is a text file.
>>> print(f) 
<_io.TextIOWrapper name='example.txt' mode='r' encoding='cp1252'>

Стоит обратить внимание, что в Windows стандартной кодировкой является cp1252, а в Linux — utf-08.

Закрытие файла

Метод close()

После открытия файла в Python его нужно закрыть. Таким образом освобождаются ресурсы и убирается мусор. Python автоматически закрывает файл, когда объект присваивается другому файлу.

Существуют следующие способы:

Способ №1

Проще всего после открытия файла закрыть его, используя метод close().

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

f.close()

После закрытия этот файл нельзя будет использовать до тех пор, пока заново его не открыть.

Способ №2

Также можно написать try/finally, которое гарантирует, что если после открытия файла операции с ним приводят к исключениям, он закроется автоматически.

Без него программа завершается некорректно.

Вот как сделать это исключение:

f = open('example.txt','r')
try:
   
finally:
   f.close()

Файл нужно открыть до инструкции try, потому что если инструкция open сама по себе вызовет ошибку, то файл не будет открываться для последующего закрытия.

Этот метод гарантирует, что если операции над файлом вызовут исключения, то он закроется до того как программа остановится.

Способ №3

Инструкция with

Еще один подход — использовать инструкцию with, которая упрощает обработку исключений с помощью инкапсуляции начальных операций, а также задач по закрытию и очистке.

В таком случае инструкция close не нужна, потому что with автоматически закроет файл.

Вот как это реализовать в коде.

with open('example.txt') as f:
    

Чтение и запись файлов в Python

В Python файлы можно читать или записывать информацию в них с помощью соответствующих режимов.

Функция read()

Функция read() используется для чтения содержимого файла после открытия его в режиме чтения (r).

Синтаксис

file.read(size)

Где,

  • file = объект файла
  • size = количество символов, которые нужно прочитать. Если не указать, то файл прочитается целиком.

Пример

>>> f = open('example.txt','r')
>>> f.read(7)  
'This is '

Интерпретатор прочитал 7 символов файла и если снова использовать функцию read(), то чтение начнется с 8-го символа.

>>> f.read(7)  
' a text'

Функция readline()

Функция readline() используется для построчного чтения содержимого файла. Она используется для крупных файлов. С ее помощью можно получать доступ к любой строке в любой момент.

Пример

Создадим файл test.txt с нескольким строками:

This is line1.
This is line2.
This is line3.

Посмотрим, как функция readline() работает в

test.txt.

>>> x = open('test.txt','r')
>>> x.readline()  
This is line1.
>>> x.readline(2)  
This is line2.
>>> x.readlines()  
['This is line1.','This is line2.','This is line3.']

Обратите внимание, как в последнем случае строки отделены друг от друга.

Функция write()

Функция write() используется для записи в файлы Python, открытые в режиме записи.

Если пытаться открыть файл, которого не существует, в этом режиме, тогда будет создан новый.

Синтаксис

file.write(string)

Пример

Предположим, файла xyz.txt не существует. Он будет создан при попытке открыть его в режиме чтения.

>>> f = open('xyz.txt','w')  
>>> f.write('Hello \n World')  
Hello
World
>>> f.close()  

Переименование файлов в Python

Функция rename()

Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.

Синтаксис следующий.

import os
os.rename(src,dest)

Где,

  • src = файл, который нужно переименовать
  • dest = новое имя файла

Пример

>>> import os
>>> 
>>> os.rename("xyz.txt","abc.txt")

Текущая позиция в файлах Python

В Python возможно узнать текущую позицию в файле с помощью функции tell(). Таким же образом можно изменить текущую позицию командой seek().

Пример

>>> f = open('example.txt')  
>>> f.read(4)  
This
>>> f.tell()  
4
>>> f.seek(0,0)  

Методы файла в Python

file.close()
закрывает открытый файл
file.fileno()возвращает целочисленный дескриптор файла
file.flush()очищает внутренний буфер
file.isatty()возвращает True, если файл привязан к терминалу
file.next()возвращает следующую строку файла
file.read(n)чтение первых n символов файла
file.readline()читает одну строчку строки или файла
file.readlines()читает и возвращает список всех строк в файле
file.seek(offset[,whene])устанавливает текущую позицию в файле
file.seekable()проверяет, поддерживает ли файл случайный доступ. Возвращает True, если да
file.tell()возвращает текущую позицию в файле
file.truncate(n)уменьшает размер файл. Если n указала, то файл обрезается до n байт, если нет — до текущей позиции
file.write(str)добавляет строку str в файл
file.writelines(sequence)добавляет последовательность строк в файл

Чтение и запись файлов JSON в Python с помощью библиотеки Pandas

Библиотека Pandas предоставляет классы и функционал для чтения, обработки и визуализации данных, хранящихся в различных форматах. В этой статье мы научимся считывать и записывать данные JSON, используя Python и Pandas.

Сначала мы создадим файл с использованием ядра Python, а затем считаем и запишем в него данные с помощью Pandas.

В Python для создания данных JSON можно использовать вложенные словари. Каждый элемент во внешнем словаре соответствует столбцу в файле JSON.

Ключ каждого элемента – заголовок столбца, а значение – другой словарь, состоящий из строк столбца. Реализуем словарь, который можно использовать для создания файла JSON со списком вымышленных пациентов:

patients = {
         "Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
         "Gender":{"0":"Male","1":"Male","2":"Female","3":"Male"},
         "Nationality":{"0":"UK","1":"French","2":"USA","3":"Brazil"},
         "Age" :{"0":10,"1":25,"2":35,"3":29}
}

В приведенном выше коде первый элемент соответствует столбцу Name. Значение элемента состоит из словаря, в котором элементы являются строками. Ключи внутренних элементов словаря соответствуют порядковым номерам строк, где значения представляют значения строк.

В столбце Name первая запись сохраняется в нулевом индексе, где значением записи является John, и так далее.

Еще один способ создания данных в формате JSON – использование списка словарей. Каждый элемент в списке состоит из словаря, а каждый словарь представляет строку. Этот подход удобнее для чтения, по сравнению с использованием вложенных словарей.

Создадим список для файла JSON, в котором хранится информация о разных автомобилях:

cars = [
    {"Name":"Honda", "Price": 10000, "Model":2005, "Power": 1300},
    {"Name":"Toyota", "Price": 12000, "Model":2010, "Power": 1600},
    {"Name":"Audi", "Price": 25000, "Model":2017, "Power": 1800},
    {"Name":"Ford", "Price": 28000, "Model":2009, "Power": 1200},
         
]

Каждому элементу словаря соответствует строка в файле JSON. Например, первый элемент в первом словаре хранит в столбце Name значение Honda. Значение в первой строке столбца Price будет 10000 и так далее.

С помощью вложенных словарей и списков словарей можно сохранить данные в файле JSON. Для этого мы будем использовать модуль json и метод dump():

import json
with open('E:/datasets/patients.json', 'w') as f:
    json.dump(patients, f)
    
with open('E:/datasets/cars.json', 'w') as f:
    json.dump(cars, f)  

Теперь у нас есть два файла JSON — patients.json и cars.json.

Чтобы прочитать файл JSON с помощью Pandas, вызовем метод read_json() и передадим ему путь к файлу, который нужно прочитать. Метод возвращает DataFrame, который хранит данные в виде столбцов и строк.

Но сначала нужно установить библиотеку Pandas:

Приведенный ниже скрипт считывает файл patients.json из локальной системной директории и сохраняет результат во фрейме данных patients_df. Затем заголовок фрейма выводится с помощью метода head():

import pandas as pd
patients_df = pd.read_json('E:/datasets/patients.json')
patients_df.head()

Запуск этого кода должен дать следующий результат:

Следующий скрипт считает файл cars.json из локальной системы и затем вызовет метод head()cars_df для вывода заголовка:

cars_df = pd.read_json('E:/datasets/cars.json')
cars_df.head()

Результат запуска этого кода:

С помощью метода read_json() также можно считывать файлы JSON, расположенные на удаленных серверах. Для этого нужно передать в вызов функции путь удаленного файла JSON.

Давайте прочитаем и выведем заголовок из Iris Dataset:

import pandas as pd
iris_data = pd.read_json("https://raw.githubusercontent.com/domoritz/maps/master/data/iris.json")
iris_data.head()

Результат запуска этого кода:

Чтобы преобразовать фрейм данных Pandas в файл JSON, используем функцию to_json() и передадим ей в качестве параметра путь к файлу, который будет создан.

Создадим файл JSON из набора данных tips, который включен в библиотеку Seaborn. Но сначала установим ее:

Затем импортируем ее и загрузим подсказки в набор данных:

import seaborn as sns

dataset = sns.load_dataset('tips')
dataset.head()

Ниже показано как выглядит набор данных:

Функция Seaborn load_dataset() возвращает DataFrame, поэтому загрузка набора данных позволяет вызвать функцию to_json() для ее преобразования.

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

dataset.to_json('E:/datasets/tips.json')

Перейдя в каталог E:/datasets, вы должны увидеть там файл tips.json, JSON-данные которого соответствует записям во фрейме данных Pandas tips:

{
   "total_bill":{
       "0":16.99,
       "1":10.34,
       "2":21.01,
       "3":23.68,
       "4":24.59,
       "5":25.29,
       ...
   }
   "tip":{
       "0":1.01,
       "1":1.66,
       "2":3.5,
       "3":3.31,
       "4":3.61,
       "5":4.71,
       ...
   }
   "sex":{
        "0":"Female",
        "1":"Male",
        "2":"Male",
        "3":"Male",
        "4":"Female",
        "5":"Male",
        ...
   }
    "smoker":{
        "0":"No",
        "1":"No",
        "2":"No",
        "3":"No",
        "4":"No",
        "5":"No",
        ...
    }
    ...

В этой статье мы рассмотрели, как считывать и записывать файлы JSON, используя популярную библиотеку Pandas Python.

Данная публикация представляет собой перевод статьи «Reading and Writing JSON to a File in Python» , подготовленной дружной командой проекта Интернет-технологии.ру

3 способа записи списка в файл на Python

Краткое описание: В этой краткой статье демонстрируются три способа записи списка в файл на языке сценариев Python.

В предыдущем совете по написанию сценариев мы показали вам, как выполнять команды Shell в Python. В этой статье мы покажем вам несколько способов записи списка в файл на Python.

 

Запись списка в файл на Python

На самом деле методы, которые мы собираемся обсудить здесь, используются для записи текста в файл на Python. В примерах, которые мы здесь используем, обсуждается запись списка в файл, но вы можете использовать его для написания любого текста. строка и т. д. с использованием функций, упомянутых здесь.

 

Метод 1: Запись списка в файл строка за строкой в ​​Python, используя print

Команда печати в Python может использоваться для печати содержимого списка в файл. Элементы списка будут добавлены в новой строке в выходном файле.

Вот пример программы на Python для вашей справки:

MyList = ["Самара", "Сочи", "Мурманск", "Анапа"] 
MyFile = open ('output.txt', 'w')
for element in MyList:
    print >>MyFile, element
MyFile.close()

 

Файл output.txt открывается в режиме записи. Цикл for в python повторяется для каждого элемента в списке. Команды печати записывают элемент в открытый файл.

Если вы используете команду cat для отображения содержимого выходного файла , это будет так:

Самара
Сочи
Мурманск
Анапа

 

Как видите, элементы списка записывались построчно в выходной файл.

В примерах файл был открыт в режиме записи с опцией ‘w’. Все предыдущее содержимое файла в этом режиме будет перезаписано.

Если вы хотите сохранить предыдущее содержимое файла, вы можете открыть файл в режиме добавления, используя опцию «a» вместо «w».

 

Способ 2: записать список в файл, используя функцию записи в Python

Теперь давайте посмотрим, как можно сохранить список в файл на Python. Мы собираемся использовать функцию Write().

Функция write() принимает строку в качестве аргумента. Итак, мы снова будем использовать цикл for для итерации каждого элемента в списке и записи его в файл.

Вот пример программы на Python:

MyList = ["Самара", "Сочи", "Мурманск", "Анапа"] 
MyFile=open('output.txt', 'w')
for element in MyList:
     MyFile.write(element)
     MyFile.write('\n')
MyFile.close()

 

Обратите внимание, что элементы в списке не имеют символа новой строки. Вот почему мы добавляем символ новой строки ‘\ n’ после каждой итерации, чтобы элементы списка записывались в файл построчно. Если вы этого не сделаете, вы увидите все содержимое списка в одной строке.

 

Способ 3: записать все строки в файл одновременно, используя функцию writelines()

Два других метода, которые мы видели, записывали содержимое списка в файл построчно. Метод writelines() отличается. Этот метод принимает список в качестве входных данных и записывает список как есть в открытый файл.

Вот простая программа:

MyList = ["Самара", "Сочи", "Мурманск", "Анапа"] 

MyFile = open ('output.txt', 'w') 
MyFile.writelines (MyList) 
MyFile.close ()

 

Если вы используете команду для просмотра файла в командной строке Linux , вот что вы увидите в выводе:

СамараСочиПарисАнапа

 

Это не самый красивый вывод. Но это точное содержание списка.

Если вы хотите печатать построчно текст в файл с помощью функции writelines, вы все равно можете это сделать, но вам придется приложить дополнительные усилия.

Здесь вы можете изменить сам список и добавить символ новой строки после каждого элемента. И теперь, если вы напечатаете список с помощью writelines(), вы получите вывод построчно.

Вот пример программы для этого:

MyList = ["Самара", "Сочи", "Мурманск", "Анапа"] 

MyFile = open ('output.txt', 'w') 
MyList = map (lambda x: x + '\ n', MyList) 
MyFile.writelines (MyList) 
MyFile.close ()

 

Мы надеемся, что этот быстрый небольшой совет помог вам в написании списка в файл, используя Python. Если вы используете другой способ, поделитесь им с нами. Если статья помогла вам, пожалуйста, дайте нам знать, оставив комментарий ниже.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Запись данных в файл

Как осуществить чтение из файла мы обсудили в прошлой статье. В данной статье мы обсудим способы записи данных в файл. Чтобы не было ошибки из за доступа, убедитесь, что в папке где вы хотите выполнить изменения или сам файл имеют права 777.

Чтобы не соскучится, мы покажем несколько способов внесения данных в файл и наглядно увидим результат. Чтобы открыть файл для записи или же создать его, мы воспользуемся функцией open(filename, mod) и в качестве второго параметрам mod укажем значение w т.е. (write) запись. Если файл с указанным названием filename не существует — он будет создан.

Создаем новый файл в Python

# -*- coding: utf-8 -*-
my_file = open('snake.txt', 'w')
 
# Закрываем файл
my_file.close()

После выполнения данного скрипта, по указанному нами пути будет создан новый файл snake.txt если файл не был создан то нужно проверить права доступа на папку. Стоит учесть, что если файл snake.txt существовал ранее, то после открытия его функцией open() и мод W, тогда содержимое файла удаляется. Если вы хотите добавить что-то в конце, то следует использовать мод ‘a+’.

Запись данных в файл Python

Предположим, что мы создали новый файл и хотим в него внести некий текст, для этого воспользуемся методом write().

# -*- coding: utf-8 -*-
my_file = open('snake.txt', 'w')
 
text_for_file = 'Some text here...'
my_file.write(text_for_file)
 
my_file.close()

Можно выполнять запись и изменения в любые типы файлов с которыми хотите работать. Ограничение на манипуляцию файлов в зависимости от его типа нету, данные функции имеют полный контроль над файлами, конечно, если администратор выделил файлу нужные права.

Заменяем данные из определенной строки файла

Если требуется замена данных из файла на определенной его строке, то для этого понадобятся методы readlines() и writelines(). Нам предстоит открыть построчно файл, заменить нужную строку и сохранить файл в такой очередности в которой находятся значения в списке.

Изначальный файл snake.txt

Я
Программа
написанная
в
Python
3

Заменяем 5-ю строку со значением ‘Python’ на значение ‘Питон’

# -*- coding: utf-8 -*-
# Открываем файл только для чтения
f = open('snake.txt', 'r')
lines = f.readlines()
lines[4] = 'Питон' + '\n'
 
# Закрываем файл
f.close()
 
# Открываем файл для записи
save_changes = open('snake.txt', 'w')
 
# Сохраняем список строк
save_changes.writelines(lines)
 
# Закрываем файл
save_changes.close()

Финальный вид файла snake.txt

Я
Программа
написанная
в
Питон
3

Копирование файлов в Python

Как осуществить копирование файлов, мы обсуждали в прошлой статье. Но, можно копировать файлы без использования каких либо библиотек или модулей. В примере мы будем копировать изображения из одной папки в другую.

# -*- coding: utf-8 -*-
# Открываем файл только для чтения
old_image = open('temp/pro.jpeg', 'r').read()
 
# Создаем новый файл
new_image = open('new_pro.jpeg', 'w')
 
# Сохраняем данные старой картинки в новую
new_image.write(old_image)
new_image.close()

По дороге к работе где вы отлично программируйте на пайтоне случилось непредсказуемое и вы попали в небольшое дтп и некому вытащить вашу машину из беды? Рекомендую отличный эвакуатор который вытащит из любой ситуации вашего железного коня, может даже и подбросит до работы.

Написание файлов CSV на Python

Мы собираемся использовать исключительно модуль csv , встроенный в Python для этой задачи. Но сначала нам нужно будет импортировать модуль как:

  импорт csv
  

Мы уже рассмотрели основы использования модуля csv для чтения и записи в файлы CSV. Если вы не знаете, как использовать модуль csv , ознакомьтесь с нашим руководством по Python CSV: чтение и запись файлов CSV


Базовое использование csv.писатель ()

Давайте рассмотрим базовый пример использования csv. писатель () , чтобы освежить существующие знания.

Пример 1: Запись в файлы CSV с помощью csv.writer ()

Предположим, мы хотим записать файл CSV со следующими записями:

  SN, имя, вклад
1, Линус Торвальдс, ядро ​​Linux
2, Тим Бернерс-Ли, World Wide Web
3, Гвидо ван Россум, Программирование на Python
  

Вот как мы это делаем.

  импорт csv
с открытыми ('новаторами.csv ',' w ', newline =' ') как файл:
    Writer = csv.writer (файл)
    writer.writerow (["SN", "Имя", "Вклад"])
    Writer.writerow ([1, «Линус Торвальдс», «Ядро Linux»])
    writer.writerow ([2, «Тим Бернерс-Ли», «Всемирная паутина»])
    writer.writerow ([3, «Гвидо ван Россум», «Программирование на Python»])
  

Когда мы запускаем указанную выше программу, в текущем рабочем каталоге создается файл novators.csv с заданными записями.

Здесь мы открыли новатора.csv в режиме записи с использованием функции open () .

Чтобы узнать больше об открытии файлов в Python, посетите: Python File Input / Output

Затем функция csv.writer () используется для создания объекта writer . Затем функция writer.writerow () используется для записи отдельных строк в файл CSV.


Пример 2: Запись нескольких строк с помощью writerows ()

Если нам нужно записать содержимое двумерного списка в файл CSV, вот как мы можем это сделать.

  импорт csv
row_list = [["SN", "Имя", "Вклад"],
             [1, «Линус Торвальдс», «Ядро Linux»],
             [2, «Тим Бернерс-Ли», «Всемирная паутина»],
             [3, «Гвидо ван Россум», «Программирование на Python»]]
с open ('protagonist.csv', 'w', newline = '') как файл:
    Writer = csv.writer (файл)
    Writer.writerows (список_строк)
  

Вывод программы такой же, как в Пример 1 .

Здесь наш двухмерный список передается автору записи .writerows () для записи содержимого списка в файл CSV.


Теперь посмотрим, как мы можем записывать файлы CSV в разных форматах. Затем мы узнаем, как настроить функцию csv.writer () для их записи.


Файлы CSV с настраиваемыми разделителями

По умолчанию в CSV-файле в качестве разделителя используется запятая. Однако в некоторых файлах CSV могут использоваться другие разделители, кроме запятой. Несколько популярных — | и \ т .

Предположим, мы хотим использовать | в качестве разделителя в файле novators.csv файла , пример 1 . Чтобы записать этот файл, мы можем передать дополнительный параметр разделитель в функцию csv.writer () .

Рассмотрим пример.

Пример 3: Запись файла CSV с разделителем трубы

  импорт csv
data_list = [["SN", "Имя", "Вклад"],
             [1, «Линус Торвальдс», «Ядро Linux»],
             [2, «Тим Бернерс-Ли», «Всемирная паутина»],
             [3, «Гвидо ван Россум», «Программирование на Python»]]
с открытыми ('новаторами.csv ',' w ', newline =' ') как файл:
    Writer = csv.writer (файл, разделитель = '|')
    Writer.writerows (список_данных)
  

Выход

  SN | Имя | Вклад
1 | Линус Торвальдс | Ядро Linux
2 | Тим Бернерс-Ли | Всемирная паутина
3 | Гвидо ван Россум | Программирование на Python
  

Как видим, необязательный параметр delimiter = '|' помогает указать объект writer , который должен иметь CSV-файл | в качестве разделителя.


Файлы CSV с котировками

В некоторых файлах CSV каждая или некоторые записи заключаются в кавычки.

В качестве примера возьмем quotes.csv со следующими записями:

  «SN»; «Имя»; «Цитаты»
1; «Будда»; «То, чем мы думаем, мы становимся»
2; «Марк Твен»; «Никогда не сожалей о том, что заставило тебя улыбнуться»
3; «Оскар Уайльд»; «Будь собой, все остальные уже заняты»
  

Использование csv.writer () по умолчанию не добавляет эти кавычки в записи.

Чтобы добавить их, нам нужно будет использовать другой необязательный параметр, называемый , цитирующий .

Давайте рассмотрим пример использования кавычек вокруг нечисловых значений и ; в качестве разделителей.

Пример 4: Запись файлов CSV с кавычками

  импорт csv
row_list = [
    [«SN», «Имя», «Цитаты»],
    [1, «Будда», «Кем мы думаем, мы становимся»],
    [2, «Марк Твен», «Никогда не сожалей о том, что заставило тебя улыбнуться»],
    [3, «Оскар Уайльд», «Будь собой, все остальные уже заняты»]
]
с open ('quotes.csv', 'w', newline = '') как файл:
    писатель = csv.писатель (файл, цитирование = csv.QUOTE_NONNUMERIC, delimiter = ';')
    Writer.writerows (список_строк)
  

Выход

  «SN»; «Имя»; «Цитаты»
1; «Будда»; «То, чем мы думаем, мы становимся»
2; «Марк Твен»; «Никогда не сожалей о том, что заставило тебя улыбнуться»
3; «Оскар Уайльд»; «Будь собой, все остальные уже заняты»
  

Здесь в рабочем каталоге создается файл quotes.csv с указанными выше записями.

Как видите, мы прошли csv.QUOTE_NONNUMERIC до , указывающего параметр . Это константа, определяемая модулем csv .

csv.QUOTE_NONNUMERIC указывает объект writer , который должен быть добавлен в кавычки вокруг нечисловых записей.

Есть еще 3 предопределенных константы, которые вы можете передать в параметр , цитирующий :

  • csv.QUOTE_ALL — указывает объект writer для записи файла CSV с кавычками вокруг всех записей.
  • csv.QUOTE_MINIMAL — указывает объекту writer цитировать только те поля, которые содержат специальные символы (разделитель , quotechar или любые символы в указателе строки )
  • csv.QUOTE_NONE — указывает объекту writer , что ни одна из записей не должна цитироваться. Это значение по умолчанию.

Файлы CSV с настраиваемым символом кавычек

Мы также можем писать файлы CSV с пользовательскими кавычками.Для этого нам нужно будет использовать необязательный параметр под названием quotechar .

Давайте рассмотрим пример записи файла quotes.csv в Пример 4 , но с * в качестве символа цитирования.

Пример 5: Запись файлов CSV с произвольным символом кавычек

  импорт csv
row_list = [
    [«SN», «Имя», «Цитаты»],
    [1, «Будда», «Кем мы думаем, мы становимся»],
    [2, «Марк Твен», «Никогда не сожалей о том, что заставило тебя улыбнуться»],
    [3, «Оскар Уайльд», «Будь собой, все остальные уже заняты»]
]
с открытыми ('кавычками.csv ',' w ', newline =' ') как файл:
    Writer = csv.writer (файл, цитирование = csv.QUOTE_NONNUMERIC,
                        delimiter = ';', quotechar = '*')
    Writer.writerows (список_строк)
  

Выход

  * SN *; * Имя *; * Цитаты *
1; * Будда *; * То, чем мы думаем, мы становимся *
2; * Марк Твен *; * Никогда не сожалей о том, что заставило тебя улыбнуться *
3; * Оскар Уайльд *; * Будь собой, все остальные уже заняты *
  

Здесь мы видим, что параметр quotechar = '*' указывает объекту writer использовать * в качестве цитаты для всех нечисловых значений.


Диалекты в модуле CSV

Обратите внимание, что в примере 5 мы передали несколько параметров ( с кавычками , разделитель и quotechar ) в функцию csv.writer () .

Эта практика приемлема при работе с одним или двумя файлами. Но это сделает код более избыточным и уродливым, как только мы начнем работать с несколькими CSV-файлами схожих форматов.

В качестве решения этой проблемы модуль csv предлагает диалект в качестве дополнительного параметра.


Dialect помогает сгруппировать множество определенных шаблонов форматирования, таких как разделитель , skipinitialspace , , цитирующий , escapechar в одно имя диалекта.

Затем его можно передать в качестве параметра нескольким экземплярам writer или reader .


Пример 6: Запись файла CSV с использованием диалекта

Предположим, мы хотим записать файл CSV ( office.csv ) со следующим содержанием:

  "ID" | "Имя" | "Электронная почта"
"A878" | "Альфонсо К.Hamby "|" [email protected] "
«F854» | «Сюзанна Бриар» | «[email protected]»
"E833" | "Катя Мауэр" | "[email protected]"
  

В CSV-файле есть кавычки вокруг каждой записи и используется | в качестве разделителя.

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

  импорт csv
row_list = [
    ["ID", "Имя", "Электронная почта"],
    [«A878», «Альфонсо К. Хэмби», «[email protected]»],
    [«F854», «Сюзанна Бриар», «Susannebriard @ armyspy.com "],
    [«E833», «Катя Мауэр», «[email protected]»]
]
csv.register_dialect ('myDialect',
                     разделитель = '|',
                     цитата = csv.QUOTE_ALL)
с open ('office.csv', 'w', newline = '') как файл:
    Writer = csv.writer (файл, диалект = 'myDialect')
    Writer.writerows (список_строк)
  

Выход

  "ID" | "Имя" | "Электронная почта"
"A878" | "Альфонсо К. Хэмби" | "[email protected]"
«F854» | «Сюзанна Бриар» | «[email protected]»
"E833" | "Катя Мауэр" | "kmauer @ jadoop.com "
  

Здесь office.csv создается в рабочем каталоге с указанным выше содержимым.

Из этого примера мы видим, что функция csv.register_dialect () используется для определения настраиваемого диалекта. Его синтаксис:

  csv.register_dialect (имя [, диалект [, ** fmtparams]])
  

Для настраиваемого диалекта требуется имя в виде строки. Другие спецификации могут быть выполнены либо путем передачи подкласса класса Dialect , либо с помощью отдельных шаблонов форматирования, как показано в примере.


При создании объекта writer мы передаем dialect = 'myDialect' , чтобы указать, что экземпляр средства записи должен использовать этот конкретный диалект.

Преимущество использования диалекта состоит в том, что он делает программу более модульной. Обратите внимание, что мы можем повторно использовать myDialect для записи других файлов CSV без необходимости повторно указывать формат CSV.


Запись файлов CSV с помощью csv.DictWriter ()

Объекты цсв.Класс DictWriter () можно использовать для записи в файл CSV из словаря Python.

Минимальный синтаксис класса csv.DictWriter () :

  csv.DictWriter (файл, имена полей)
  

Здесь,

  • файл — CSV файл, в который мы хотим записать
  • fieldnames — объект списка , который должен содержать заголовки столбцов, определяющие порядок, в котором данные должны быть записаны в файл CSV

Пример 7: Python csv.DictWriter ()

  импорт csv

с open ('player.csv', 'w', newline = '') как файл:
    fieldnames = ['player_name', 'fide_rating']
    Writer = csv.DictWriter (файл, имена полей = имена полей)

    писатель.writeheader ()
    Writer.writerow ({'player_name': 'Магнус Карлсен', 'fide_rating': 2870})
    Writer.writerow ({'player_name': 'Фабиано Каруана', 'fide_rating': 2822})
    writer.writerow ({'player_name': 'Дин Лижэнь', 'fide_rating': 2801})
  

Выход

Программа создает игроков.csv со следующими записями:

  player_name, fide_rating
Магнус Карлсен, 2870 г.
Фабиано Каруана, 2822 год.
Дин Лижэнь, 2801
  

Полный синтаксис класса csv.DictWriter () :

  csv.DictWriter (f, fieldnames, restval = '', extrasaction = 'raise', dialect = 'excel', * args, ** kwds)
  

Чтобы узнать об этом подробнее, посетите: Python csv.DictWriter () class


Файлы CSV с ограничителем строки

Линейный указатель — это строка, используемая для завершения строк, созданных объектами Writer .Значение по умолчанию — \ r \ n . Вы можете изменить его значение, передав любую строку в качестве параметра lineterminator .

Однако объект reader распознает только \ n или \ r как значения lineterminator . Поэтому использование других символов в качестве обозначения конца строки крайне не рекомендуется.


двойные кавычки и эскапечар в модуле CSV

Чтобы разделить символы-разделители в записях, модуль csv по умолчанию помещает записи в кавычки.

Итак, если у вас была запись: Он сильный, здоровый мужчина , то будет написано: «Он сильный, здоровый человек» .

Аналогично, модуль csv использует двойные кавычки, чтобы избежать символа кавычек, присутствующего в записях по умолчанию.

Если у вас есть запись: Перейти на «programiz.com» , она будет записана как: «Перейти на» «programiz.com» «» .

Здесь мы видим, что за каждым " следует " , чтобы избежать предыдущего.


двойные кавычки

Он обрабатывает то, как цитируются quotechar , присутствующие в самой записи. Когда True , символ кавычки удваивается, а когда False , escapechar используется в качестве префикса к quotechar . По умолчанию его значение True .

escapechar

escapechar параметр — это строка для выхода за пределы разделителя, если для кавычек установлено значение csv.QUOTE_NONE и quotechar, если двойные кавычки False .Его значение по умолчанию — Нет.

Пример 8: Использование escapechar в csv writer

  импорт csv
row_list = [
    ["Книга", "Цитата"],
    ['Властелин колец',
        '«Все, что нам нужно решить, это что делать с отведенным нам временем».'],
    ['Гарри Поттер', '«Важно не то, кем кто-то родился, а то, кем он вырастет».']
]
с open ('book.csv', 'w', newline = '') как файл:
    Writer = csv.writer (файл, escapechar = '/', цитата = csv.QUOTE_NONE)
    Writer.writerows (список_строк)
  

Выход

  Книга, Цитата
Властелин колец, / "Все, что нам нужно решить, это что делать с отведенным нам временем./ "
Гарри Поттер, / "Важно не то, кем кто-то родился /, а то, кем он вырастет. /"
  

Здесь мы видим, что / является префиксом для всех " и , , потому что мы указали quoting = csv.QUOTE_NONE .

Если бы он не был определен, то вывод был бы:

  Книга, Цитата
«Властелин колец», «Все, что мы должны решить, это что делать с отведенным нам временем».
Гарри Поттер "" "Важно не то, кем кто-то родился, а то, кем он вырастет."" "
  

Поскольку мы разрешаем использование кавычек, записи со специальными символами (в данном случае ) заключаются в двойные кавычки. Записи с разделителем также заключаются в кавычки. (Начальные и закрывающие кавычки)

Остальные символы кавычек должны экранировать фактические ", присутствующие как часть строки, чтобы они не интерпретировались как quotechar.


Примечание: Модуль csv также можно использовать для других расширений файлов (например: .txt ), пока их содержимое имеет правильную структуру.

Рекомендуемая литература: Чтение файлов CSV в Python

Как записать список в файл в Python [3 метода]

В предыдущем совете по написанию сценариев я показал вам, как выполнять команды Shell в Python. В этом кратком руководстве я покажу вам несколько способов записи списка в файл на Python.

Запись списка в файл на Python

На самом деле методы, которые я собираюсь здесь обсудить, используются для записи текста в файл на Python.В примерах, которые я здесь использую, обсуждается запись списка в файл, но вы можете использовать его для записи любого текста. строка и т. д. с использованием упомянутых здесь функций.

Метод 1. Построчное написание списка в файл в Python с использованием print

Команду печати в Python можно использовать для печати содержимого списка в файл. Элементы списка будут добавлены в новую строку выходного файла.

Вот пример программы Python для справки:

  MyList = ["Нью-Йорк", "Лондон", "Париж", "Нью-Дели"]
MyFile = open ('вывод.txt ',' ш ')

для элемента в MyList:
    print >> MyFile, элемент
MyFile.close ()  

Файл output.txt открывается в режиме записи. Цикл for в Python выполняет итерацию для каждого элемента в списке. Команды печати записывают элемент в открытый файл.

Если вы используете команду cat для отображения содержимого выходного файла, это будет следующее:

  New York
Лондон
Париж
Нью-Дели  

Как видите, элементы списка были записаны построчно в выходном файле.

В примерах файл был открыт в режиме записи с параметром «w». Все предыдущее содержимое файла в этом режиме будет перезаписано.

Если вы хотите сохранить предыдущее содержимое файла, вы можете открыть файл в режиме добавления, используя опцию «a» вместо «w».

Метод 2: Запись списка в файл с использованием функции записи в Python

Теперь давайте посмотрим, как еще один способ сохранить список в файл на Python. Мы собираемся использовать функцию Write ().

Функция write () принимает в качестве аргумента строку.Итак, мы снова будем использовать цикл for, чтобы перебрать каждый элемент в списке и записать его в файл.

Вот пример программы на Python:

  MyList = [«Нью-Йорк», «Лондон», «Париж», «Нью-Дели»]
MyFile = open ('output.txt', 'ш')

для элемента в MyList:
     MyFile.write (элемент)
     MyFile.write ('\ n')
MyFile.close ()  

Обратите внимание, что элементы в списке не имеют символа новой строки. Вот почему я добавил символ новой строки «\ n» после каждой итерации, чтобы элементы списка записывались в файл построчно.Если вы этого не сделаете, вы увидите все содержимое списка в одной строке.

Метод 3: Записать все строки в файл сразу с помощью функции Writelines ()

Два других метода, которые мы видели, записывали содержимое списка в файл построчно. Writelines () отличается. Этот метод принимает список в качестве входных данных и записывает этот список в открытый файл.

Вот простая программа:

  MyList = [«Нью-Йорк», «Лондон», «Париж», «Нью-Дели»]

MyFile = open ('вывод.txt ',' ш ')
MyFile.writelines (MyList)
MyFile.close ()  

Если вы используете команду для просмотра файла в командной строке Linux, вот что вы увидите в выводе:

  New YorkLondonParisNew Delhi  

Это не самый красивый вывод, я согласен. Но это точное содержание списка.

Если вы хотите напечатать текст построчно в файл с помощью функции Writelines, вы все равно можете сделать это, но вам придется приложить дополнительные усилия.

Здесь вы можете изменить сам список и добавить символ новой строки после каждого элемента.А теперь, если вы распечатаете список с помощью Writelines (), вы получите вывод построчно.

Вот пример программы для этого:

  MyList = ["Нью-Йорк", "Лондон", "Париж", "Нью-Дели"]

MyFile = open ('output.txt', 'ш')
MyList = map (лямбда x: x + '\ n', MyList)
MyFile.writelines (MyList)
MyFile.close ()  

Надеюсь, этот небольшой совет помог вам в написании списка в файл с помощью Python. Если вы используете другой способ, поделитесь им с нами. Если руководство помогло вам, дайте мне знать, оставив комментарий ниже.

Python — печать в файл

В этой статье мы рассмотрим некоторые способы использования Python для печати в файл.


Метод 1. Печать в файл с помощью функции Write ()

Мы можем напрямую писать в файл, используя встроенную функцию write (), которую мы узнали в нашем руководстве по работе с файлами.

с open ('output.txt', 'a') как f:
    f.write ('Привет')
    f.write ('Привет от AskPython')
    f.write ('выход')
 

Вывод (Предположим, что вывод .txt — это вновь созданный файл)

vijay @ AskPython: ~ # python output_redirection.py
Привет
Привет от AskPython
Выход
корень @ ubuntu: ~ # cat output.txt
Привет
Привет от AskPython
Выход
 

Метод 2: Перенаправить sys.stdout в файл

Обычно, когда мы используем функцию печати , вывод выводится на консоль.

Но поскольку стандартный поток вывода также является обработчиком файлового объекта, мы можем направить стандартный вывод sys.stdout , чтобы вместо этого указывать на файл назначения.

Приведенный ниже код взят из нашей предыдущей статьи о stdin, stdout и stderr. Это перенаправляет print () в файл.

import sys
 
# Сохраняем текущий стандартный вывод, чтобы мы могли вернуть sys.stdou после завершения
# наше перенаправление
stdout_fileno = sys.stdout
 
sample_input = ['Привет', 'Привет от AskPython', 'выход']
 
# Перенаправить sys.stdout в файл
sys.stdout = open ('output.txt', 'ш')
 
для ip в sample_input:
    # Печатает в перенаправленный стандартный вывод (Output.текст)
    sys.stdout.write (ip + '\ n')
    # Печатает в фактический сохраненный обработчик stdout
    stdout_fileno.write (ip + '\ n')
 
# Закройте файл
sys.stdout.close ()
# Восстановить sys.stdout в наш старый обработчик сохраненных файлов
sys.stdout = stdout_fileno
 

Выходные данные (Предположим, что output.txt — новый созданный файл)

vijay @ AskPython: ~ # python output_redirection.py
Привет
Привет от AskPython
Выход
корень @ ubuntu: ~ # cat output.txt
Привет
Привет от AskPython
Выход
 

Метод 3. Явная печать в файл

Мы можем напрямую указать файл для печати при вызове print () , указав аргумент ключевого слова file .

Например, приведенный ниже фрагмент печатается в файл output.txt .

print ('Привет', file = open ('output.txt', 'a'))
print ('Привет от AskPython', file = open ('output.txt', 'a'))
print ('выход', file = open ('output.txt', 'a'))
 

Теперь к файлу добавлены три строки, и мы успешно напечатали в output.txt !

Использование диспетчера контекста

Однако этот метод не лучший способ решить эту ситуацию из-за многократных вызовов open () для того же файла.Это напрасная трата времени, и мы можем добиться большего!

Лучшим способом было бы явно использовать диспетчер контекста с оператором , который заботится об автоматическом закрытии файла и прямом использовании файлового объекта.

с open ("output.txt", "a") как f:
    print ('Привет', file = f)
    print ('Привет от AskPython', file = f)
    print ('выход', файл = f)
 

Это дает тот же результат, что и раньше, добавляя три строки к output.txt , но теперь работает намного быстрее, поскольку мы не открываем один и тот же файл снова и снова.


Метод 4. Используйте модуль регистрации

Мы можем использовать модуль ведения журнала Python для печати в файл. Это предпочтительнее метода 2, где явное изменение файловых потоков не является самым оптимальным решением.

импорт журнала

# Создаем файл
# и выводить каждый уровень, поскольку используется DEBUG
# и удалите все заголовки в выводе
# используя пустой формат = ''
logging.basicConfig (filename = 'output.txt', level = logging.DEBUG, format = '')

logging.debug («Привет»)
протоколирование.info ('Привет от AskPython')
logging.warning ('выход')

 

По умолчанию добавляются три строки в файл output.txt . Таким образом, мы распечатали в файл, используя , запись в журнал , что является одним из рекомендуемых способов печати в файл.


Список литературы


Python Открытый файл, чтение, запись — EndMemo

Файл Python Объект может открывать, читать и записывать файлы. Предположим, текстовый файл «tp.txt» со следующим содержанием:

«; ss + = «
• acos»; ss + = « • добавить»; ss + = «
• argparse»; ss + = « • asin»; ss + = «
• assert»; ss + = « • атан»; ss + = «
• atan2″; ss + = « • базовое имя»; ss + = «
• блок»; ss + = « • логическое»; ss + = «
• разрыв»; ss + = « • ceil»; ss + = «
• цепочка»; ss + = « • класс»; ss + = «
• комбинации»; ss + = « • комментарий»; ss + = «
• сжать»; ss + = « • объединить»; ss + = «
• copysign»; ss + = « • cos»; ss + = «
• count»; ss + = « • csv»; ss + = «
• цикл»; ss + = « • datetime»; ss + = «
• градусы»; ss + = « • dict»; ss + = «
• словарь»; ss + = « • скачать»; ss + = «
• drop while»; ss + = « • eval»; ss + = «
• исключения»; ss + = « • exp»; ss + = «
• expm1″; ss + = « • фабс»; ss + = «
• факториал»; ss + = « • файл»; ss + = «
• фильтр»; ss + = « • filterfalse»; ss + = «
• пол»; ss + = « • fmod»; ss + = «
• для цикла»; ss + = « • frexp»; ss + = «
• fsum»; ss + = « • функция»; ss + = «
• генератор»; ss + = « • glob»; ss + = «
• глобальный»; ss + = « • графика»; ss + = «
• groupby»; ss + = « • хэш»; ss + = «
• гипотеза»; ss + = « • если еще»; ss + = «
• isinf»; ss + = « • иснан»; ss + = «
• итерируемый»; ss + = « • itertools»; ss + = «
• соединить»; ss + = « • json»; ss + = «
• keyerror»; ss + = « • ключевые слова»; ss + = «
• убить поток»; ss + = « • kwargs»; ss + = «
• лямбда»; ss + = « • ldexp»; ss + = «
• список»; ss + = « • журнал»; ss + = «
• log1p»; ss + = « • log10″; ss + = «
• ведение журнала»; ss + = « • нижний регистр»; ss + = «
• карта»; ss + = « • карта»; ss + = «
• modf»; ss + = « • не равно»; ss + = «
• ноль»; ss + = « • открыто»; ss + = «
• os»; ss + = « • перестановки»; ss + = «
• рассол»; ss + = « • pow»; ss + = «
• печать»; ss + = « • продукт»; ss + = «
• очередь»; ss + = « • радианы»; ss + = «
• случайный»; ss + = « • диапазон»; ss + = «
• регулярное выражение»; ss + = « • повторить»; ss + = «
• sin»; ss + = « • сортировать»; ss + = «
• сплит»; ss + = « • sqrt»; ss + = «
• карта звездного неба»; ss + = « • строки»; ss + = «
• строки»; ss + = « • takewhile»; ss + = «
• загар»; ss + = « • тройник»; ss + = «
• trunc»; ss + = « • кортежи»; ss + = «
• юникод»; ss + = « • urllib»; ss + = «
• пользовательский ввод»; ss + = « • переменная»; ss + = «
• переменная»; ss + = « • цикл while»; ss + = «
• с»; ss + = « • xml»; ss + = «
• xrange»; ss + = « • yield»; ss + = «
• zip»; ss + = « • zip»; ss + = «
• zip-файл»; ss + = « • zip_longest»; ss + = ««; ss + = «

Открытие файлов и запись в файлы

Процесс записи в файл очень похож на процесс чтения из файла (который рассматривается в отдельном уроке), поскольку оба требуют открытия файлового объекта для доступа.Разница заключается в втором аргументе open () , в котором передается строка "w" — сокращение от write -.

  newfile = open ("hello.txt", "w")
  

Когда файловый объект создается в режиме записи , он имеет доступ к методу write () . Закрытие файлового объекта работает так же, как и при чтении из файла:

  newfile.write ("привет, мир")
newfile.write ("прощай, мир")
новый файл.написать ("вокка вокка")
newfile.close ()
  

Запись двоичного файла

Приведенный выше пример работает при записи текста в файл. Однако при записи двоичных данных , то есть байта , строка "wb" должна быть передана в функцию open () :

  newfile = open ("somebinaryfile.zip", "wb")
  

Большинство типов файлов, которые мы пишем, будут в текстовом режиме , но иногда мы загружаем двоичный файл — например, zip-файл или файл изображения — и сохраняем его на диск.

При попытке открыть файл для , читающего , но передавая несуществующее имя файла, Python выдаст ошибку FileNotFound . Попробуйте это в интерактивной оболочке Python:

  >>> myfile = open ("blaskdfjsadklfjdfsadflkj", "r")
FileNotFoundError: [Errno 2] Нет такого файла или каталога: 'blaskdfjsadklfjdfsadflkj'
  

Что произойдет, если вы попытаетесь открыть файл в режиме записи с таким же бессмысленным именем?

  >>> myfile = open ("blaskdfjsadklfjdfsadflkj", "w")
  

Ничего, по крайней мере, по ошибкам.Вместо этого файл с именем blaskdfjsadklfjdfsadflkj будет создан везде, где выполняется ваш код. Если вы запускали его из каталога ~ / Desktop , например:

Хорошо, но что произойдет, если вы попытаетесь открыть файл для записи с именем файла, который уже существует ? Ничего, ошибочно . Но какой бы файл ни указывал существующий файл, в основном уничтожил . Вы можете получить сообщение об ошибке, если попытаетесь записать по пути, который указывает на каталог или какой-либо защищенный файл.Но для любого другого типа файлов это просто вместо и нет подтверждающего сообщения.

Вот почему в каждом из заданий я предлагаю вам создать новый подкаталог tempdata и спрятать в него все, чтобы снизить вероятность того, что вы в конечном итоге перезапишете существующие файлы в других файловых каталогах. Но вы все равно должны быть осторожны — то есть уделите несколько секунд и подумайте о том, что вы делаете, прежде чем нажимать Enter — всякий раз, когда вы передаете "w" или "wb" в функцию open () .

Значительная часть этой главы посвящена предупреждению вас о том, как запись файлов может привести к катастрофическим последствиям случайного удаления данных , поэтому стоит спросить: , почему мы вообще вообще хотим записывать файлы?

Ответ довольно прост: чтобы данные, которые мы собрали / создали, могли жить после того, как наша программа завершит свою работу — или, как это часто бывает, неожиданно умирает.

Рассмотрим следующий код, который загружает HTML-содержимое текущей домашней страницы New York Times в переменную с именем nyttext :

  запросов на импорт
resp = запросы.получить ("https://www.nytimes.com")
nyttext = соответственно текст
  

Если моя программа на этом заканчивается, все, что было сохранено в переменных , соответственно, и , nyttext — это , пропало . Во многих ситуациях это, вероятно, то, что нам нужно. Но если мы хотим изучить, как домашняя страница NYT меняется с течением времени, нам нужно будет сохранять ее копии, которые сохранялись от одного сеанса Python к другому. Это означает сохранение файлов на нашем жестком диске:

  из os.path import join
запросы на импорт
resp = запросы.получить ("https://www.nytimes.com")
nyttext = соответственно текст
outfname = join ("tempdata", "nytimes.com.html")
Outfile = open (имя наряда, "ш")
Outfile.write (nyttext)
Outfile.close ()
  

Стратегии предотвращения перезаписи файлов

Конечно, если мы повторно запустим этот сценарий в следующий час, день или даже в следующую секунду, все, что было на "tempdata / nytimes.com.html" , будет перезаписано.

Использовать текущее время в имени файла

Одна из стратегий — включить текущую отметку времени в имя файла, которое нужно сохранить.Здесь я создаю подкаталог с именем nytimes.com , и каждому файлу в нем присваивается имя типа 1453688120.431147.html , причем числа являются результатом функции time.time () , которая возвращает значение » текущее время в секундах с Эпохи »:

  из os.path import join
из os import makedirs
запросы на импорт
время импорта
# Настроить место для хранения
STORAGE_DIR = присоединиться ("временные данные", "nytimes.com")
македирс (STORAGE_DIR, exist_ok = True)
# Скачать страницу
resp = запросы.получить ("https://www.nytimes.com")
# Настроить новый файл
current_time = str (время.время ())
print ("Время в секундах с начала эпохи:", current_time)
outfname = join (STORAGE_DIR, current_time + '.html')
Outfile = open (имя наряда, "ш")
Outfile.write (соответственно текст)
Outfile.close ()
  

Если вы сохранили этот код в скрипте с именем nytdownload.py , а затем повторно запускали его через интерпретатор командной строки:

  $ python nytdownload.py
Время в секундах с начала эпохи: 1453689209.676369
$ python nytdownload.py
Время в секундах с начала эпохи: 1453689210,85706
$ python nytdownload.py
Время в секундах с начала эпохи: 1453689212.452021
$ python nytdownload.py
Время в секундах с начала эпохи: 1453689213,67095.
  

У вас будет подкаталог tempdata / nytimes.com , полный файлов:

 .
├── nytdownload.py
└── временные данные
    └── nytimes.com
        ├── 1453689209.676369.html
        ├── 1453689210.85706.html
        ├── 1453689212.452021.html
        └── 1453689213.67095.html
  

Проверить наличие файла

Иногда нужно загрузить файл только один раз . Например, произведения Шекспира вряд ли изменятся в ближайшем будущем, поэтому мы захотим загрузить файл только в том случае, если мы никогда не загружали его раньше.

Мы можем использовать метод exists () из модуля os.path , который возвращает True или False , если путь, переданный в него, в настоящее время существует:

  из os.соединение импорта пути
из os.path существует импорт
запросы на импорт
SHAKE_URL = "http://stash.compciv.org/scrapespeare/matty.shakespeare.tar.gz"
SHAKE_LOCAL_PATH = присоединиться ("временные данные", "shakespeare.tar.gz")
если существует (SHAKE_LOCAL_PATH):
    print ("Пропуск загрузки;", SHAKE_LOCAL_PATH, 'уже существует')
еще:
    print ("Скачивание", SHAKE_URL)
    resp = requests.get (SHAKE_URL)
    Outfile = открытый (SHAKE_LOCAL_PATH, 'wb')
    # помните, что у объектов Requests Response есть `content`
    # атрибут при работе с содержимым двоичных файлов
    Outfile.написать (соответственно содержание)
    print ("Файл сохранен в:", SHAKE_LOCAL_PATH)
    Outfile.close ()
  

Сохраните этот код в файл, например shakeydownload.py и запустите его из командной строки. Предполагая, что у вас нет ничего по пути tempdata / shakespeare.tar.gz и загрузка успешно завершена, вы должны увидеть этот результат через несколько секунд или сколько бы времени ни потребовалось вашей интернет-коллекции, чтобы загрузить все работы Шекспира. :

  $ python shakeydownload.ру
Скачивание http://stash.compciv.org/scrapespeare/matty.shakespeare.tar.gz
Сохраненный файл: tempdata / shakespeare.tar.gz
  

Попробуйте перезапустить скрипт. Сценарий должен завершиться почти мгновенно, поскольку ему не нужно загружать файл:

  $ python shakeydownload.py
Пропуск загрузки; tempdata / shakespeare.tar.gz уже существует
$ python shakeydownload.py
Пропуск загрузки; tempdata / shakespeare.tar.
Оставить комментарий

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *