Перейти к содержимому

Python как создать пустой файл

  • автор:

Как лучше создать пустой файл в Python 3?

Какой способ лучше и почему? Какие еще есть способы?

Особенно интересует описание работы второго способа. Функция open создаст файловый объект, но т. к. он никуда не сохранен, интерпретатор его удалит? Т. е. тогда файл будет сразу доступен для чтения/редактирования/удаления, но уже другой команде/программе?

Python 3.4, Windows 8.1

  • Вопрос задан более трёх лет назад
  • 47588 просмотров

2 комментария

Оценить 2 комментария

lololololo @lololololo
Encoding лишнее для пустого файла
Станислав Карпов @stkrp Автор вопроса
lololololo: Да, согласен, из-за привычки указал.
Решения вопроса 1

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

Ответ написан более трёх лет назад
Нравится 2 2 комментария
Станислав Карпов @stkrp Автор вопроса

Это так просто, но почему-то абсолютно не думал об объединении этих двух операций. То, что я искал. Большое спасибо!

По поводу предположения. Попробовал вот так:

from time import sleep with open('1.txt', 'wt') as f: f.write('test_1') sleep(15) f.write('test_2')

И во время выполнения блокнотом открыл файл и записал ‘test’. По окончании работы скрипта в файле остается ‘test’. Причем, файл создался, но данные, введенные перед sleep(15) не сохранены в файле. Если файл не открывать в течение 15 секунд, то он будет содержать ‘test_1test_2’.

Python 3.4, Ubuntu 14.04

Ну то что файлы можно открыть из разных процессов еще не означает, что если писать в него из разных процессов, то все будет хорошо 🙂
>Причем, файл создался, но данные, введенные перед sleep(15) не >сохранены в файле.
Ну это как раз таки все нормально — есть такое понятие как буфферезированый ввод/вывод (см. flush)
То что если успеть переписать файл после открытия, нужно точно смотреть, что до как, но скорее всего тут проблема во внутренних указателях файла.

Создать пустой файл

, но выглядит это не очень читаемо. Зачем для создания открывать и закрывать сразу? Есть какие-нибудь другие варианты?

Отслеживать
задан 7 фев 2019 в 6:07
3 2 2 бронзовых знака

Странный вопрос. Можете и не закрывать файл, если он пустой. Ну или так еще можно: from io import FileIO; FileIO(file, ‘w’)

7 фев 2019 в 6:21
@mkkik мне надо просто создать его, ничего писать туда не надо. Почему можно не закрывать файл?
7 фев 2019 в 6:34
Потому что он пустой, данные вы непотеряете.
7 фев 2019 в 6:41

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

По аналогии с утилитой touch :

from pathlib import Path Path('/tmp/file').touch() 

Отслеживать
ответ дан 7 фев 2019 в 6:44
user207200 user207200
5,166 8 8 золотых знаков 23 23 серебряных знака 41 41 бронзовый знак
Спасибо, так выглядит лучше
7 фев 2019 в 6:48
Только touch не сделает файл пустым, если тот уже существует.
7 фев 2019 в 7:20

  • python
  • python-3.x
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

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

Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.10.27.43697

Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Функция open. Чтение и запись текстовых файлов в Python

Большие объемы данных хранят не в списках или словарях, а в файлах и базах данных. В этом уроке изучим особенности работы с текстовыми файлами в Python. Такие файлы рассматриваются как содержащие символы и строки.

Бывают еще байтовые (бинарные) файлы, которые рассматриваются как потоки байтов. Побайтово считываются, например, файлы изображений. Работа с бинарными файлами несколько сложнее. Нередко их обрабатывают с помощью специальных модулей Python (pickle, struct).

Функция open

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

Обычно используются режимы чтения ( ‘r’ ) и записи ( ‘w’ ). Если файл открыт в режиме чтения, то запись в него невозможна. Можно только считывать данные. Если файл открыт в режиме записи, то в него можно только записывать данные, считывать нельзя.

Если файл открывается в режиме ‘w’ , то все данные, которые в нем были до этого, стираются. Файл становится пустым. Если не надо удалять существующие в файле данные, тогда следует использовать вместо режима записи, режим дозаписи ( ‘a’ ).

Если файл отсутствует, то открытие его в режиме ‘w’ создаст новый файл. Бывают ситуации, когда надо гарантировано создать новый файл, избежав случайной перезаписи данных существующего. В этом случае вместо режима ‘w’ используется режим ‘x’ . В нем всегда создается новый файл для записи. Если указано имя существующего файла, то будет выброшено исключение. Потери данных в уже имеющемся файле не произойдет.

Если при вызове open() второй аргумент не указан, то файл открывается в режиме чтения как текстовый файл. Чтобы открыть файл как байтовый, дополнительно к букве режима чтения/записи добавляется символ ‘b’ . Буква ‘t’ обозначает текстовый файл. Поскольку это тип файла по умолчанию, то обычно ее не указывают.

Нельзя указывать только тип файла, то есть open(«имя_файла», ‘b’) есть ошибка, даже если файл открывается на чтение. Правильно – open(«имя_файла», ‘rb’) . Только текстовые файлы мы можем открыть командой open(«имя_файла») , потому что и ‘r’ и ‘t’ подразумеваются по-умолчанию.

Функция open() возвращает объект файлового типа. Его надо либо сразу связать с переменной, чтобы не потерять, либо сразу прочитать.

Чтение файла

С помощью файлового метода read() можно прочитать файл целиком или только определенное количество байт. Пусть у нас имеется файл data.txt с таким содержимым:

one - 1 - I two - 2 - II three - 3 - III four - 4 - IV five - 5 - V

Откроем его и почитаем:

>>> f1 = open(‘data.txt’) >>> f1.read(10) ‘one — 1 — ‘ >>> f1.read() ‘I\ntwo — 2 — II\nthree — 3 — III\nfour — 4 — IV\nfive — 5 — V\n’ >>> f1.read() » >>> type(f1.read())

Сначала считываются первые десять символов. Последующий вызов read() считывает весь оставшийся текст. После этого объект файлового типа f1 становится пустым.

Заметим, что метод read() возвращает строку, и что конец строки считывается как ‘\n’ .

Для того, чтобы читать файл построчно существует метод readline() :

>>> f1 = open('data.txt') >>> f1.readline() 'one - 1 - I\n' >>> f1.readline() 'two - 2 - II\n' >>> f1.readline() 'three - 3 — III\n'

Метод readlines() считывает сразу все строки и создает список:

>>> f1 = open('data.txt') >>> f1.readlines() ['one - 1 - I\n', 'two - 2 - II\n', 'three - 3 - III\n', 'four - 4 - IV\n', 'five - 5 - V\n']

Объект файлового типа относится к итераторам. Из таких объектов происходит последовательное извлечение элементов. Элементами в данном случае являются строки-линии файла. Поэтому считывать данные из файла можно сразу в цикле без использования методов чтения:

>>> for i in open('data.txt'): . print(i) . one - 1 - I two - 2 - II three - 3 - III four - 4 - IV five - 5 - V >>>

Здесь выводятся лишние пустые строки, потому что функция print() преобразует ‘\n’ в переход на новую строку. К этому добавляет свой переход на новую строку. Создадим список строк файла без ‘\n’ :

>>> nums = [] >>> for i in open('data.txt'): . nums.append(i[:-1]) . >>> nums ['one - 1 - I', 'two - 2 - II', 'three - 3 - III', 'four - 4 - IV', 'five - 5 - V']

Переменной i присваивается очередная строка файла. Мы берем ее срез от начала до последнего символа, не включая его. Следует иметь в виду, что ‘\n’ это один символ, а не два.

Запись в файл

Запись в файл выполняется с помощью методов write() и writelines() . Во второй можно передать структуру данных:

>>> l = ['tree', 'four'] >>> f2 = open('newdata.txt', 'w') >>> f2.write('one') 3 >>> f2.write(' two') 4 >>> f2.writelines(l)

Метод write() возвращает количество записанных символов.

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

После того как работа с файлом закончена, важно не забывать его закрыть, чтобы освободить место в памяти. Делается это с помощью файлового метода close() . Свойство файлового объекта closed позволяет проверить закрыт ли файл.

>>> f1.close() >>> f1.closed True >>> f2.closed False

Если файл открывается в заголовке цикла ( for i in open(‘fname’) ), то видимо интерпретатор его закрывает при завершении работы цикла или через какое-то время.

Практическая работа

  1. Создайте файл data.txt по образцу урока. Напишите программу, которая открывает этот файл на чтение, построчно считывает из него данные и записывает строки в другой файл ( dataRu.txt ), заменяя английские числительные русскими, которые содержатся в списке ( [«один», «два», «три», «четыре», «пять»] ), определенном до открытия файлов.
  2. Создайте файл nums.txt , содержащий несколько чисел, записанных через пробел. Напишите программу, которая подсчитывает и выводит на экран общую сумму чисел, хранящихся в этом файле.

Примеры решения и дополнительные уроки в pdf-версии курса

X Скрыть Наверх

Python. Введение в программирование

Создание Excel файла на Python

Недавно мне понадобилось экспортировать данные в excel файл.На python это делается очень легко. Поэтому мы чуть усложним пример. Будем скачивать изображения и вставим их Excel файл.

Для создания Excel файла мы будем использовать xlsxwriter

 pip install xlsxwriter 

Для начала создадим пустой Excel файл

 import xlsxwriter workbook = xlsxwriter.Workbook('example.xlsx') worksheet = workbook.add_worksheet() workbook.close() 

Теперь давайте добавим данные в наш файл

 from io import BytesIO import xlsxwriter from urllib.request import urlopen works = [ < 'id' : 1, 'name': 'Work 1', 'image_url': 'https://dagstyazhka.ru/static/img/content/tPOXB2KXhck.jpg', >, < 'id' : 2, 'name': 'Work 2', 'image_url': 'https://dagstyazhka.ru/static/img/content/-iNioTY6Mw.jpg', >, < 'id' : 3, 'name': 'Work 3', 'image_url': 'https://dagstyazhka.ru/static/img/content/-iNioTY6Mw.jpg', >, ] workbook = xlsxwriter.Workbook('example.xlsx') worksheet = workbook.add_worksheet() worksheet.write(0, 0, 'ID') worksheet.write(0, 1, 'Name') worksheet.write(0, 2, 'Image_url') i = 1 for work in works: worksheet.write(i, 0, work.get('id')) worksheet.write(i, 1, work.get('name')) image_url = work.get('image_url') image_data = BytesIO(urlopen(image_url).read()) worksheet.insert_image(i,2, image_url, ) i +=1 workbook.close() 

С помощью python и библиотеки xlsxwriter буквально за пару строчек кода можно загрузить любые данные в Excel файл и при необходимости отформатировать их

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

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