Файлы в Python OTUS
Статья расскажет о работе с файлами в Python: о вводе и выводе, открытии, чтении, записи, закрытии и выполнении других не менее важных операций.
Файл представляет собой набор данных, сохраненных на компьютере, причем каждый файл имеет название — filename (имя файла, name of file).
В языке программирования Python выделяют 2 вида файлов:
— текстовые;
— бинарные.
Поговорим о каждом из типов подробнее.
Текстовые файлы. Формат .txtСодержимое таких файлов вполне понятно человеку. То есть речь идет об обычных общепринятых символах, тексте, цифрах и т. п. Такие документы можно без проблем создавать, открывать, читать и редактировать Блокнотом и прочими простейшими редакторами.
Также важно отметить, что текст хранят не только в форме .txt, но и в формате.rtf (так называемом «формате обогащенного текста»).
Бинарные файлы. Формат .binВ бинарных файлах отображение данных осуществляется в кодированной форме (применяются лишь нули и единицы). То есть речь идет уже о последовательности битов. Как следует из подзаголовка, для хранения используется формат .bin.
Основные операции
По сути, практически любую операцию с файлом мы можем разделить на 3 главных этапа:
- Открытие.
- Непосредственно выполнение операции (чтение, запись).
- Закрытие.
В «Питоне» существует встроенная функция open. Используя ее, вы сможете открыть файл на персональном компьютере. Технически, речь идет о создании на основе файла объекта.
Синтаксис относительно прост:
f = open(file_name, access_mode)
Что здесь что:
- file_name — это имя файла, который надо открыть;
- access_mode — это режим открытия файла. Это может быть чтение, запись и так далее. Если ничего не указать, будут справедливы настройки по умолчанию, те есть станет использоваться режим чтения (r).
Полный список режимов открытия смотрите в таблице ниже:
В качестве примера давайте выполним создание текстового файла test. txt с последующим сохранением его в рабочей директории.
Открыть созданный документ можно в режиме чтения из рабочей директории:
f = open('test.txt','r')
Здесь f представляет собой переменную-указатель на файл test.txt.
Идем далее. Код ниже выведет содержимое файла и информацию об этом файле.
>>> print(*f) # вывод содержимого
Hello, Otus!
>>> print(f) # вывод объекта
<_io.TextIOWrapper name='test.txt' mode='r' encoding='cp1252'>
Учтите, что в операционной системе «Виндовс» стандартная кодировка — это cp1252, в то время как в Linux — utf-08.
Закрытие. Метод closeРаз открыли, надо и закрыть — это высвободит ресурсы. Язык программирования Python автоматически закроет файл в том случае, если объект будет присвоен другому файлу.
Для закрытия есть несколько вариантов действий.
Вариант №1
Один из наиболее простых способов. Открытый файл закрываем с помощью метода close.
f = open('test.txt','r')
# работаем с файлом
f.close()
Все, документ закрыт (closed). Закрыв его таким образом, вы не сможете его использовать, пока не откроете по новой.
Вариант №2
Можно прописать try/finally. В результате файл закроется автоматически, если операции с ним приведут к исключениям. Закрытие произойдет до того, как остановится программа.
Синтаксис создания исключения следующий:
f = open('test.txt','r')
try:
# работаем с файлом
finally:
f.close()
Важно отметить, что файл следует открыть до срабатывания инструкции try.
Вариант №3
В третьем случае пригодится инструкция with, упрощающая обработку исключений посредством инкапсуляции начальных операций, а также задач по очистке и закрытию.
Тут уже инструкция close нужна не будет, так как with закроет файл автоматически.
Реализация в коде относительно проста:
with open('test.txt') as f:
# работаем с документом
Используя соответствующие режимы, можно выполнять чтение информации и ее сохранение (save) в буфер памяти.
Функция readПрименяется для чтения содержимого после открытия документа в режиме чтения (r).
Вот, как это выглядит:
file.read(size)
Что здесь что:
- file — это объект файла;
- size — это число символов, которые необходимо прочесть. Если конкретное число не указывать, документ будет прочитан полностью.
>>> f = open('test.txt','r')
>>> f.read(7) # читаем семь символов из test.txt
Это функция обеспечивает построчное чтение (считывание) содержимого. Ее используют для работы с большими файлами, так как она позволяет получать доступ к конкретной строке, причем любой.
Для примера создадим test.txt со следующими строками:
This is Otus for developers 1.
This is Otus for developers 2.
This is Otus for developers 3.
И воспользуемся readline:
x = open('test.txt','r')
x.readline() # читаем первую строку
This is Otus for developers 1.
>>> x.readline(2) # читаем 2-ю строку
This is Otus for developers 2.
>>> x.readlines() # читаем все строки сразу
['This is Otus for developers 1.','This is Otus for developers 2.','This is Otus for developers 3.']
Чтобы выполнить сохранение, нужно использовать функцию write. Сохранение в буфер памяти возможно только в те документы, которые открыты для записи (их можно сохранять, когда они находятся в соответствующем режиме).
Синтаксис несложен:
file.write(string)
Если вы попытаетесь открыть в данном режиме файл, несуществующий в буфере, будет создан новый. Представим, что файла supertest.txt у нас нет. Однако при попытке его открыть в режиме чтения, он появится:
f = open('supertest.txt','w') # открываем в режиме записи
f.write('Hello \n Otus') # пишем Hello Otus в документ
Hello
Otus
f.close() # закрываем документ
Может возникнуть необходимость в переименовании имен файлов (filenames). Вопрос можно решить посредством функции rename. Но чтобы это сделать, сначала надо импортировать модуль os.
Синтаксис:
import os
os.rename(src,dest)
Что здесь что:
- src — это файловый документ, которому надо изменить name;
- dest — это новое имя.
Вот, как это выглядит в коде:
import os
# переименовываем otus1.txt в otus2.txt
>>> os. rename("otus1.txt","otus2.txt")
В таблице ниже вы увидите основные методы, которые используются при работе с файлами (files) в «Пайтон»:
Источник
Как прочитать файл через python?
Вопрос задан
Изменён 1 год 1 месяц назад
Просмотрен 318 раз
Есть файл api.php
, но не могу его прочитать, я таким способом пытался открыть.
f = open("api.php", "r") t = f.read() print(t)
Пытался загуглить но нечего не помогло.
Ошибка
"C:\Users\Marlin\AppData\Local\Programs\Python\Python310\lib\encodings\cp1251.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table) [0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x98 in position 3656: character maps to <undefined> Для продолжения нажмите любую клавишу .. .
- python
- python-3.x
5
import os path = os.path.join(os.path.dirname(__file__), "api.php") f = open(path, "r") t = f.read() f.close() print(t)
Когда вы пишете относительный путь к файлу, он ищется в текущей рабочей директории, которая может отличаться от расположения скрипта. Текущую рабочуюю директорию (current working directory) можно получить с помощью os.getcwd()
, полный путь к скрипту хранится в переменной __file__
.
Файлы лучше открывать с помощью менеджера контекста with, который гарантирует закрытие файла в случае возникновения исключения и избавляет от необходимости закрывать файл.
import os path = os.path.join(os.path.dirname(__file__), "api.php") with open(path, "r") as f t = f.read() print(t)
- Если хотите из любого другого места читать, тогда надо указывать абсолютный путь к читаемому файлу.
- Если просто указываете имя и расширение читаемого файла, тогда файл скрипта и читаемого файла д/б в одном каталоге:
Зарегистрируйтесь или войдите
Регистрация через Google
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Необходима, но никому не показывается
Нажимая на кнопку «Отправить ответ», вы соглашаетесь с нашими пользовательским соглашением, политикой конфиденциальности и политикой о куки
os.
path — Общие манипуляции с путями — Документация по Python 3.11.3Исходный код: Lib/posixpath.py (для POSIX) и Lib/ntpath.py (для Windows).
Этот модуль реализует некоторые полезные функции для путей. Читать или писать
файлы см. open()
, а для доступа к файловой системе см. os
модуль. Параметры пути могут быть переданы в виде строк, байтов или любого объекта.
реализация протокола os.PathLike
.
В отличие от оболочки Unix, Python не выполняет никаких автоматических расширений пути.
Можно вызывать такие функции, как expanduser()
и expandvars()
.
явно, когда приложению требуется расширение пути, похожее на оболочку. (Смотрите также
модуль glob
.)
См. также
Модуль pathlib
предлагает объекты пути высокого уровня.
Примечание
Все эти функции принимают либо только байты, либо только строковые объекты в качестве их параметры. Результатом является объект того же типа, если путь или возвращается имя файла.
Примечание
Так как разные операционные системы имеют разные соглашения об именах путей,
несколько версий этого модуля в стандартной библиотеке. Модуль os.path
всегда является модулем пути, подходящим для операционной
system, на которой работает Python, и поэтому может использоваться для локальных путей. Однако,
вы также можете импортировать и использовать отдельные модули, если хотите манипулировать
путь
Изменено в версии 3.8: exists()
, lexists()
, isdir()
, isfile()
, islink()
и ismount()
теперь возвращают False
вместо
создание исключения для путей, содержащих символы или байты
непредставим на уровне ОС.
- os.path.abspath( путь )
Вернуть нормализованную абсолютизированную версию пути path . На большинстве платформах, это эквивалентно вызову функции
нормпат()
как следует:normpath(join(os.getcwd(), путь))
.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.basename ( путь )
- Вернуть базовое имя pathname path . Это второй элемент
пара возвращается путем передачи пути функции
split()
. Обратите внимание, что результат этой функции другой из программы Unix basename ; где базовое имя для'/foo/bar/'
возвращает'bar'
, функцияbasename()
возвращает пустая строка (''
).Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.commonpath ( путей )
Возвращает самый длинный общий подпуть каждого имени пути в последовательности путей . Поднимите
ValueError
, если путей содержат как абсолютные и относительные пути, пути находятся на разных дисках или если путей пусто. В отличие отcommonprefix()
, это возвращает действительный путь.Доступность: Unix, Windows.
Новое в версии 3.5.
Изменено в версии 3.6: Принимает последовательность объектов, подобных пути.
- os.path.commonprefix (список )
Возвращает самый длинный префикс пути (взятый посимвольно), который является префикс всех путей в списке . Если список пуст, вернуть пустую строку (
''
).Примечание
Эта функция может возвращать недопустимые пути, поскольку она работает персонаж за раз. Чтобы получить правильный путь, см.
общий путь()
.>>> os.path.commonprefix(['/usr/lib', '/usr/local/lib']) '/usr/л' >>> os.path.commonpath(['/usr/lib', '/usr/local/lib']) '/ уср'
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.dirname ( путь )
Вернуть имя каталога pathname path
. Это первый элемент пара возвращается путем передачи path функцииsplit()
.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.exists( путь )
Возврат
Истинно
, если путь ссылается на существующий путь или открытый дескриптор файла. ВозвращаетFalse
для битых символических ссылок. На на некоторых платформах эта функция может возвращатьFalse
, если разрешение не разрешено выполнятьos.stat()
в запрошенном файле, даже если путь физически существует.Изменено в версии 3.3: путь теперь может быть целым числом:
True
возвращается, если это дескриптор открытого файла,False
в противном случае.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.lexists( путь )
Возврат
Истинно
, если путь ссылается на существующий путь. ВозвращаетTrue
для битые символические ссылки. Эквивалентноexists()
на платформах, отсутствующихos.lstat()
.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.expanduser( путь )
В Unix и Windows верните аргумент с начальным компонентом
~
или~пользователь
заменен домашним каталогом этого пользователя .В Unix начальные значения
~
заменяются переменной средыHOME
. если он установлен; в противном случае домашний каталог текущего пользователя ищется в каталог паролей через встроенный модульpwd
. Начальный~пользователь
ищется непосредственно в каталоге паролей.В Windows будет использоваться
ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ
, если установлено, в противном случае используется комбинация изHOMEPATH
иHOMEDRIVE
будут использоваться. инициал~пользователь
обрабатывается путем проверки того, что последний компонент каталога текущего домашний каталог пользователя соответствуетUSERNAME
и заменяет его, если это так.Если расширение не удалось или если путь не начинается с тильды, путь вернулся без изменений.
Изменено в версии 3.6: Принимает объект, подобный пути.
Изменено в версии 3.8: больше не использует
HOME
в Windows.
- os.path.expandvars( путь )
Вернуть аргумент с развернутыми переменными среды. Подстроки формы
или${name}
заменяются значением переменной окружения имя . Неверные имена переменных и ссылки на несуществующие переменные оставлен без изменений.В Windows поддерживаются расширения
%name%
в дополнение к$name
и$ {имя}
.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.getatime ( путь )
Возвращает время последнего доступа к пути . Возвращаемое значение представляет собой число с плавающей запятой, дающее количество секунд с начала эпохи (см. модуль
time
). ПодниматьOSError
, если файл не существует или недоступен.
- os.path.getmtime ( путь )
Возвращает время последней модификации пути . Возвращаемое значение представляет собой число с плавающей запятой дающее количество секунд с начала эпохи (см. модуль
time
). ПоднимитеOSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.getctime ( путь )
Возвращает ctime системы, которое в некоторых системах (например, Unix) является временем последнее изменение метаданных, а в других (например, в Windows) время создания для путь . Возвращаемое значение представляет собой число, указывающее количество секунд, прошедших с начала эпохи (см. модуль
время
). ПоднимитеOSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.getsize( путь )
Возвращает размер в байтах пути . Поднимите
OSError
, если файл не существует или недоступен.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.isabs( путь )
Возврат
Истина
, если путь является абсолютным путем. В Unix это означает, что начинается с косой черты, в Windows она начинается с (обратной) косой черты после разрезания с потенциальной буквы диска.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.isfile( путь )
Возврат
Истинно
, если путь равенсуществующий
обычный файл. Это следует за символическими ссылками, поэтому обаislink()
иisfile()
могут быть верным для одного и того же пути.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.isdir( путь )
Возврат
Истинно
, если путь являетсясуществующим каталогом
. Этот следует символическим ссылкам, поэтому обаislink()
иisdir()
могут быть истинными для того же пути.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.islink ( путь )
Возврат
Истинно
, если путь ссылается насуществующий каталог
запись, которая является символической ссылкой. ВсегдаЛожь
, если символические ссылки не поддерживается средой выполнения Python.Изменено в версии 3.6: Принимает объект, подобный пути.
- os. path.ismount( путь )
Возврат
Истина
, если путь путь является точкой монтирования : точка в файловая система, в которой смонтирована другая файловая система. В POSIX Функция проверяет, находится ли родительский путь ,путь /..
, на другом устройство, чем путь , илипуть /..
и путь указывают на одно и то же i-node на том же устройстве — это должно определять точки монтирования для всех Unix и варианты POSIX. Он не может надежно обнаруживать монтирования привязки на та же файловая система. В Windows корневая буква диска и общий ресурс UNC всегда точки монтирования, а для любого другого путиGetVolumePathName
вызывается чтобы увидеть, отличается ли он от входного пути.Новое в версии 3.4: поддержка обнаружения некорневых точек монтирования в Windows.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os. path.join ( путь , * пути )
Интеллектуальное соединение одного или нескольких сегментов пути. Возвращаемое значение — это конкатенация путей и всех членов *путей , ровно с одним разделитель каталогов после каждой непустой части, кроме последней. То есть, результат будет заканчиваться разделителем только в том случае, если последняя часть либо пуста, либо заканчивается разделителем. Если сегмент является абсолютным путем (который в Windows требуется и диск, и корень), то все предыдущие сегменты игнорируются и объединение продолжается с сегмента абсолютного пути.
В Windows диск не сбрасывается, когда корневой сегмент пути (например,
r'\foo'
). Если сегмент находится на другом диске или является абсолютный путь, все предыдущие сегменты игнорируются, и диск сбрасывается. Примечание что, поскольку для каждого диска существует текущий каталог,os.path.join("c:", "foo")
представляет путь относительно текущего каталог на дискеC:
(c:foo
), а неc:\foo
.Изменено в версии 3.6: принимает объект, подобный пути, за путь и путь .
- os.path.normcase( путь )
Нормализовать регистр имени пути. В Windows преобразовать все символы в путь к нижнему регистру, а также преобразовать прямую косую черту в обратную косую черту. В других операционных системах верните путь без изменений.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.normpath( путь )
Нормализуйте имя пути, удалив избыточные разделители и повысив уровень ссылки, так что
A//B
,A/B/
,A/./B
иA/foo/../B
все статьA/B
. Эта манипуляция со строкой может изменить значение пути который содержит символические ссылки. В Windows он преобразует косую черту в обратные косые черты. Чтобы нормализовать регистр, используйтеnormcase()
.Примечание
В системах POSIX в соответствии со стандартом IEEE Std 1003. 1, издание 2013 г.; 4.13 Разрешение имени пути, если путь начинается ровно с двух косых черт, первый компонент следующие ведущие символы могут быть интерпретированы в зависимости от реализации образом, хотя более двух ведущих символов должны рассматриваться как одиночный персонаж.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.realpath( путь , * , strict=False )
Вернуть канонический путь к указанному имени файла, исключая любые символические ссылки, встречающиеся в пути (если они поддерживаются система).
Если путь не существует или встречается цикл символической ссылки, а строгий
Истинно
,Ошибка ОС
поднят. Если strict равноFalse
, путь разрешено, насколько это возможно, и любой остаток добавляется без проверки существует ли он.Примечание
Эта функция эмулирует процедуру операционной системы для создания пути канонический, который немного отличается между Windows и UNIX в отношении как взаимодействуют ссылки и последующие компоненты пути.
API-интерфейсы операционной системы делают пути каноническими по мере необходимости, поэтому обычно необходимо вызвать эту функцию.
Изменено в версии 3.6: Принимает объект, подобный пути.
Изменено в версии 3.8: Символические ссылки и соединения теперь разрешаются в Windows.
Изменено в версии 3.10: Добавлен параметр strict .
- os.path.relpath( путь , start=os.curdir )
Вернуть относительный путь к файлу пути либо из текущего каталога, либо из необязательного каталога start . Это вычисление пути: к файловой системе нет доступа для подтверждения существования или характера путь или начало . В Windows
ValueError
возникает, когда путь и начинаются находятся на разных дисках.start по умолчанию
os.curdir
.Доступность: Unix, Windows.
Изменено в версии 3. 6: Принимает объект, подобный пути.
- os.path.samefile( путь2 , путь3 )
Вернуть
True
, если оба аргумента имени пути относятся к одному и тому же файлу или каталогу. Это определяется номером устройства и номером i-узла и вызывает исключение, еслиВызов os.stat()
по любому пути завершается ошибкой.Доступность: Unix, Windows.
Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3.4: Windows теперь использует ту же реализацию, что и все другие платформы.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.sameopenfile( fp1 , fp2 )
Возврат
Истина
, если файловые дескрипторы fp1 и fp2 относятся к одному и тому же файлу.Доступность: Unix, Windows.
Изменено в версии 3.2: Добавлена поддержка Windows.
Изменено в версии 3. 6: Принимает объект, подобный пути.
- os.path.samestat( stat1 , stat2 )
Вернуть
True
, если кортежи статистики stat1 и stat2 ссылаются на один и тот же файл. Эти структуры могли быть возвращеныos.fstat()
,os.lstat()
илиos.stat()
. Эта функция реализует базовое сравнение, используемоеsamefile()
иsameopenfile()
.Доступность: Unix, Windows.
Изменено в версии 3.4: Добавлена поддержка Windows.
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.split( путь )
Разделить имя пути путь на пару,
(голова, хвост)
, где хвост — это последний компонент пути и head — все, что к этому ведет. хвост часть никогда не будет содержать косую черту; если путь заканчивается косой чертой, хвост будет пуст. Если в нет косой черты, путь , заголовок будет пустым. Если путь пуст, как головка , так и хвост пусты. Завершающие косые черты удален из заголовка , если это не корень (только одна или несколько косых черт). В все случаи,join(head, tail)
возвращает путь к тому же месту, что и path (но строки могут отличаться). Также см. функцииdirname()
иимя_базы()
.Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.splitdrive ( путь )
Разделить путь путь на пару
(диск, хвост)
, где диск либо точка монтирования или пустая строка. В системах, не использующих диск технические характеристики, диск всегда будет пустой строкой. Во всех случаях диск+ хвост
будет таким же, как путь .В Windows разделяет путь на диск/UNC точку доступа и относительный путь.
Если путь содержит букву диска, диск будет содержать все до двоеточия включительно:
>>> раздельный диск("c:/dir") ("с:", "/дир")
Если путь содержит путь UNC, диск будет содержать имя хоста и разделить, до, но не включая четвертый разделитель:
>>> splitdrive("//хост/компьютер/каталог") ("//хост/компьютер", "/каталог")
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.splitext( путь )
Разделить путь путь на пару
(root, ext)
таким образом, чтобыroot + ext == path
, а расширение ext пусто или начинается с точки и содержит в самый один период.Если путь не содержит расширения, доб будет
''
:>>> раздельный текст('бар') ('бар', '')
Если путь содержит расширение, то ext будет установлено на это расширение, включая ведущий период. Обратите внимание, что предыдущие периоды будут игнорироваться:
>>> splitext('foo. bar.exe') ('foo.bar', '.exe') >>> splitext('/foo/bar.exe') ('/foo/bar', '.exe')
Начальные периоды последнего компонента пути считаются быть частью корня:
>>> раздельный текст('.cshrc') ('.cshrc', '') >>> разделенный текст('/foo/....jpg') ('/foo/....jpg', '')
Изменено в версии 3.6: Принимает объект, подобный пути.
- os.path.supports_unicode_filenames
True
, если в качестве имен файлов можно использовать произвольные строки Unicode (с ограничениями навязанная файловой системой).
Как писать или печатать в файл в Python
Нужно печатать в файл в Python? Сегодня мы узнаем, как легко начать писать в файлы. Мы рассмотрим создание новых файлов, добавление существующих файлов и перезапись существующих файлов.
Открытие файла для записи в Python
Возможно, вы уже знаете, как печатать на экране в Python, но вы можете не знать, как печатать в файл. К счастью, как и у большинства новичков в программировании на Python, синтаксис записи файлов прост, удобочитаем и понятен.
Связано: Как создать, импортировать и повторно использовать собственный модуль в Python
Имея это в виду, давайте начнем.
Создание и запись в новый файл в Python
Чтобы создать новый файл в Python и открыть его для редактирования, используйте встроенный open() и укажите имя файла, за которым следует параметр x .
f = open("testfile.txt", "x")
При использовании параметра «x» вы получите сообщение об ошибке, если указанное вами имя файла уже существует.
В случае успеха теперь вы можете записать в файл, используя метод write() .
f.write("Привет, мир!")
Каждая строка текста, которую вы «пишете()», будет заканчиваться символом конца строки, поэтому каждая дополнительная строка будет записываться с новой строки.
Рекомендуется всегда закрывать любой файл, который вы открываете, используя метод close() . В противном случае ваш файл может не сохраниться на диск.
f.close()
Вы также можете создавать и записывать в файл на Python с меньшим количеством строк, используя ключевое слово с .
с open("testfile.txt", "x") as f:
f.write("Hello, world!")
Этот подход рекомендуется, потому что набор «with» автоматически закроет ваш файл после завершения, поэтому вам никогда не придется помнить, чтобы закрыть его самостоятельно.
После записи файла его можно прочитать, открыв его с параметром r и вызвав метод read() .
с open("testfile.txt", "r") as f:
print(f.read())
Запись в существующий файл в Python
Если файл, который вы хотите записать, уже существует, и вы хотите добавить к нему дополнительные строки, вам нужно будет открыть его, используя параметр a для «добавить».
с открытым ("testfile.txt", "a") как f:
f.write("Я дополнительная строка")
Все, что вы пишете после открытия с параметром «a», будет добавлено с новой строкой.
Этот код также предполагает, что ваш файл находится в том же каталоге, в котором работает ваш скрипт Python. Если он находится в другом каталоге, вам нужно будет указать его путь.
Узнайте больше: Как получить текущий каталог в Python
Перезаписать существующий файл в Python
Если ваш файл уже существует, но вы хотите, чтобы он был перезаписан, а не добавлен, вы можете сделать это, открыв файл с помощью w параметр.
с open("testfile.txt", "w") as f:
f.write("Hello, world!")
Независимо от того, что было написано в testfile.txt, вывод будет «Hello, world !» когда вы это читаете.
Связано: Как запустить скрипт Python
Устранение неполадок при записи файлов на Python
Если текст, который вы печатаете в файл, путается или читается неправильно, убедитесь, что вы всегда открываете файл с правильной кодировкой.
с открытым ("testfile.txt", "w", encoding="utf8") как f:
Большинство текстовых файлов в наши дни используют кодировку UTF-8, но некоторые другие распространенные кодировки — это ISO-8859 (iso-8859-1), UTF-16 (utf16) или Windows-1252 (cp1252).