Функция 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’) ), то видимо интерпретатор его закрывает при завершении работы цикла или через какое-то время.
Практическая работа
- Создайте файл data.txt по образцу урока. Напишите программу, которая открывает этот файл на чтение, построчно считывает из него данные и записывает строки в другой файл ( dataRu.txt ), заменяя английские числительные русскими, которые содержатся в списке ( [«один», «два», «три», «четыре», «пять»] ), определенном до открытия файлов.
- Создайте файл nums.txt , содержащий несколько чисел, записанных через пробел. Напишите программу, которая подсчитывает и выводит на экран общую сумму чисел, хранящихся в этом файле.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Open files in the editor
Whatever you do in PyCharm, you do that in the context of a project. In PyCharm, you can create a project, clone it from the repository, or import from existing sources. Once you open a project, you can work with its files.
Open a file for editing
- Do one of the following:
- Double-click the desired file in one of the tool windows.
- Select the desired file in one of the tool windows and press F4 .
- Select the desired file in the one of the tool windows and choose Jump to Source on the context menu.
- Use the Search Everywhere command for a Class, File, or Symbol.
- Click the desired directory in the Navigation bar , and select file from the drop-down list:
- If the file type is registered, the file opens silently in PyCharm’s editor. If the file type is registered under the category Files opened in associated applications , it will be opened in its associated application, rather than in the PyCharm editor. By default, PyCharm suggests a number of such file types, for example .doc , .chm , or .pdf . If the file type is unknown, PyCharm suggests to choose whether you want to register a new file type, or open such file in its associated application. Specify your choice in the Register New File Type Association dialog: You can register the required file types in Settings | Editor | File Types .
Open external files
Do one of the following:
- Choose File | Open on the main menu and select the desired file in the dialog that opens.
- Drag the required file from the Explorer (Windows), File Browser (Linux), orFinder and drop it to the editor. The file opens for editing in a new tab.
Reopen a file
- To open a recently opened file, choose View | Recent Files on the main menu or press Control+E . Then select the desired file from the Recent Files popup, that opens.
- To open a recently updated file, on the main menu, choose View | Recently Changed Files . Then select the desired file from the Recently Edited Files popup, that opens.
Use Recent files limit text box in the Editor settings page to define the maximum number of recent files.
Open a file in a separate PyCharm window
Do one of the following:
- Drag and drop an editor tab outside of the current PyCharm window.
- Press Shift+F4 for a file selected in the Project tool window.
- Shift + mouse double click on a file name in the Project tool window.
Файлы. Работа с файлами.
В данной статье мы рассмотрим встроенные средства python для работы с файлами: открытие / закрытие, чтение и запись.
Итак, начнем. Прежде, чем работать с файлом, его надо открыть. С этим замечательно справится встроенная функция open:
У функции open много параметров, они указаны в статье "Встроенные функции", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.
Режим | Обозначение |
‘r’ | открытие на чтение (является значением по умолчанию). |
‘w’ | открытие на запись, содержимое файла удаляется, если файла не существует, создается новый. |
‘x’ | открытие на запись, если файла не существует, иначе исключение. |
‘a’ | открытие на дозапись, информация добавляется в конец файла. |
‘b’ | открытие в двоичном режиме. |
‘t’ | открытие в текстовом режиме (является значением по умолчанию). |
‘+’ | открытие на чтение и запись |
Режимы могут быть объединены, то есть, к примеру, ‘rb’ — чтение в двоичном режиме. По умолчанию режим равен ‘rt’.
И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.
Чтение из файла
Открыли мы файл, а теперь мы хотим прочитать из него информацию. Для этого есть несколько способов, но большого интереса заслуживают лишь два из них.
Первый — метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).
Ещё один способ сделать это — прочитать файл построчно, воспользовавшись циклом for:
Запись в файл
Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:
Откроем файл на запись:
Запись в файл осуществляется с помощью метода write:
После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:
Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.
Мы получили тот же список, что и был. В более сложных случаях (словарях, вложенных кортежей и т. д.) алгоритм записи придумать сложнее. Но это и не нужно. В python уже давно придумали средства, такие как pickle или json, позволяющие сохранять в файле сложные структуры.
Для вставки кода на Python в комментарий заключайте его в теги
- Модуль csv - чтение и запись CSV файлов
- Создаём сайт на Django, используя хорошие практики. Часть 1: создаём проект
- Онлайн-обучение Python: сравнение популярных программ
- Книги о Python
- GUI (графический интерфейс пользователя)
- Курсы Python
- Модули
- Новости мира Python
- NumPy
- Обработка данных
- Основы программирования
- Примеры программ
- Типы данных в Python
- Видео
- Python для Web
- Работа для Python-программистов
- Сделай свой вклад в развитие сайта!
- Самоучитель Python
- Карта сайта
- Отзывы на книги по Python
- Реклама на сайте
Открытие файла .py через pycharm
Пользуюсь pycharm уже сколько времени, а так и не научился открывать файл НОРМАЛЬНО. Дело всё в том, что во многих гайдах люди, пользующиеся другими редкаторами, спокойно открывают .py файлы в обычном их представлении: Консоль и/или графический интерфейс программы. Но у меня всё по другому, когда я нажимаю на этот файлик, оно открывается в редакторе Pycharm, а не запускается. Что делать? Подскажите
Отслеживать
задан 4 авг 2021 в 15:32
129 8 8 бронзовых знаков
а где в свойствах "открыть с помощью"?
29 июн в 10:18
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Правой кнопкой на файле - Свойства - Открыть с помощью - выбрать интерпретатор питона.
Отслеживать
ответ дан 4 авг 2021 в 15:38
25.9k 7 7 золотых знаков 31 31 серебряный знак 48 48 бронзовых знаков
Да, но это одноразовый способ, он не будет открываться так всегда. Но возможно ли как-то указать, как будет открываться файл в файле .bat?
4 авг 2021 в 15:52
a) если заметить галочку "всегда так открывать такой тип файлов" и поставить ее, то будет. б) вопрос про .bat непонятен
4 авг 2021 в 15:54
Highly active question. Earn 10 reputation (not counting the association bonus) in order to answer this question. The reputation requirement helps protect this question from spam and non-answer activity.
- python
- pycharm