Работа с текстовыми файлами в питоне. Запись данных в файл

28.01.2019

Мы обсудили в прошлой статье. В данной статье мы обсудим способы записи данных в файл. Чтобы не было ошибки из за доступа, убедитесь, что в папке где вы хотите выполнить изменения или сам файл имеют права 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 = "Питон" + "\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()

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

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

Печать на экране

Самый простой способ получения вывода использует print заявление, в котором вы можете передать ноль или более выражений, разделенных запятыми. Эта функция преобразует выражения Проходите в строку и записывает результат в стандартный вывод следующим образом -

#!/usr/bin/python3 print ("Python is really a great language,", "isn"t it?")

Это дает следующий результат на стандартном экране -

Python is really a great language, isn"t it?

Чтение ввода с клавиатуры

Python 2 имеет две встроенные функции для чтения данных из стандартного ввода, которая по умолчанию поставляется с клавиатуры. Эти функции input() и raw_input()

В Python 3, raw_input() функция не рекомендуется. Кроме того, input() функция считывает данные с клавиатуры в качестве строки, независимо от того, является ли он заключен в кавычках ("" or "" ) , или нет.

input функции

input() функция эквивалентна raw_input, за исключением того, что она предполагает, что ввод является корректным выражением Python и возвращает результат оцененного к вам.

#!/usr/bin/python3 >>> x=input("something:") something:10 >>> x "10" >>> x=input("something:") something:"10" #entered data treated as string with or without "" >>> x ""10""

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

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

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

open функция

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

Синтаксис

file object = open(file_name [, access_mode][, buffering])

Здесь параметр детали:

    file_name: имя_файл аргумент является строка, которая содержит имя файла, который вы хотите получить доступ.

    access_mode: access_mode определяет режим, в котором файл должен быть открыт, т.е. чтение, запись, добавление и т.д. Полный список возможных значений приводятся ниже в таблице. Это необязательный параметр и режим доступа файла по умолчанию для чтения (r) .

    buffering: Если значение буферизация установлено равным 0, не буферизация не происходит. Если значение буферизации 1, строка буферизация выполняется во время доступа к файлу. Если указать значение буферного как целое число больше 1, то буферные действие выполняются с указанным размером буфера. Если ответ отрицательный, то размер буфера системы по default(default behavior) по default(default behavior) .

Вот список различных режимов открытия файла -

Режимы Описание
r Открывает файл только для чтения. Указатель файла помещается в начало файла. Это режим "по умолчанию".
rb Открывает файл только для чтения в двоичном формате. Указатель файла помещается в начало файла. Это режим "по умолчанию".
r+ Открывает файл для чтения и записи. Файл указатель помещается в начало файла.
rb+ Открывает файл для чтения и записи в двоичном формате. Файл указатель помещается в начало файла.
w Открывает файл только для записи. Заменяет файл, если файл существует. Если файл не существует, создается новый файл для записи.
wb Открывает файл только для записи в двоичном формате. Заменяет файл, если файл существует. Если файл не существует, создается новый файл для записи.
w+ Открывает файл как для чтения и письма. Заменяет существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.
wb+ Открывает файл как для записи и чтения в двоичном формате. Заменяет существующий файл, если файл существует. Если файл не существует, создает новый файл для чтения и записи.
a Открывает файл для добавления. Указатель файла находится в конце файла, если файл существует. То есть, файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.
ab Открывает файл для добавления в двоичном формате. Указатель файла находится в конце файла, если файл существует. То есть, файл находится в режиме добавления. Если файл не существует, он создает новый файл для записи.
a+ Открывает файл для обоего добавляющих и чтения. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.
ab+ Открывает файл как для добавления и чтения в двоичном формате. Указатель файла находится в конце файла, если файл существует. Файл открывается в режиме добавления. Если файл не существует, он создает новый файл для чтения и записи.

В file атрибутов объекта

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

Вот список всех атрибутов, относящихся к файловому объекту:

Note: атрибут softspace не поддерживается в Python 3.x

пример

#!/usr/bin/python3 # Open a file fo = open("foo.txt", "wb") print ("Name of the file: ", fo.name) print ("Closed or not: ", fo.closed) print ("Opening mode: ", fo.mode) fo.close()

Name of the file: foo.txt Closed or not: False Opening mode: wb

close() Метод

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

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

Синтаксис

fileObject.close();

пример

#!/usr/bin/python3 # Open a file fo = open("foo.txt", "wb") print ("Name of the file: ", fo.name) # Close opened file fo.close()

Это дает следующий результат -

Name of the file: foo.txt

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

file объект содержит набор методов доступа, чтобы сделать нашу жизнь проще. Мы хотели бы видеть, как использовать read() и write() методы для чтения и записи файлов.

write() Метод

write() метод записывает любую строку в открытом файле. Важно отметить, что строки Python могут иметь двоичные данные, а не только текст.

write() метод не добавляет символ новой строки ("\n") в конце строки -

Синтаксис

fileObject.write(string);

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

пример

#!/usr/bin/python3 # Open a file fo = open("foo.txt", "w") fo.write("Python is a great language.\nYeah its great!!\n") # Close opend file fo.close()

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

Python is a great language. Yeah its great!!

read() Метод

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

Синтаксис

fileObject.read();

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

пример

Давайте возьмем файл foo.txt , который мы создали выше.

#!/usr/bin/python3 # Open a file fo = open("foo.txt", "r+") str = fo.read(10) print ("Read String is: ", str) # Close opened file fo.close()

Это дает следующий результат -

Read String is: Python is

Позиции файла

tell() метод говорит вам текущую позицию в файле; Другими словами, следующий чтение или запись будет происходить в том, что многие байт от начала файла.

seek(offset[, from]) метод изменяет текущую позицию в файле. offset аргумент указывает число байтов, которые будут перемещены. from аргумента определяет базисную позицию, откуда байты должны быть перемещены.

Если from установлено значения 0, то это означает, что использовать начало файла в качестве опорной позиции и 1 означает использовать текущее положение в качестве опорной позиции, и если он установлен в 2 , то конец файла будет принят в качестве исходной позиции,

пример

Возьмем файл foo.txt , который мы создали выше.

#!/usr/bin/python3 # Open a file fo = open("foo.txt", "r+") str = fo.read(10) print ("Read String is: ", str) # Check current position position = fo.tell() print ("Current file position: ", position) # Reposition pointer at the beginning once again position = fo.seek(0, 0) str = fo.read(10) print ("Again read String is: ", str) # Close opened file fo.close()

Это дает следующий результат -

Read String is: Python is Current file position: 10 Again read String is: Python is

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

Python os модуль предоставляет методы, которые помогут вам выполнять файловые операции обработки, такие как переименование и удаление файлов.

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

rename() Метод

rename() метод принимает два аргумента имя файла и новое имя файла.

Синтаксис

os.rename(current_file_name, new_file_name)

пример

Ниже приводится пример, чтобы переименовать существующий файл test1.txt :

#!/usr/bin/python3 import os # Rename a file from test1.txt to test2.txt os.rename("test1.txt", "test2.txt")

remove() Метод

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

Синтаксис

os.remove(file_name)

пример

Ниже приведен пример для удаления существующего файла test2.txt -

#!/usr/bin/python3 import os # Delete file test2.txt os.remove("text2.txt")

Каталоги в Python

mkdir() Метод

Вы можете использовать mkdir() метод os модуля для создания каталогов в текущем каталоге. Вы должны указать аргумент для этого метода, который содержит имя каталога, который будет создан.

Синтаксис

os.mkdir("newdir")

пример

Ниже приведен пример для создания каталога test в текущем каталоге -

#!/usr/bin/python3 import os # Create a directory "test" os.mkdir("test")

chdir() Метод

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

Синтаксис

os.chdir("newdir")

пример

Ниже приводится пример, чтобы войти в "/home/newdir" каталог -

#!/usr/bin/python3 import os # Changing a directory to "/home/newdir" os.chdir("/home/newdir")

getcwd() Метод

getcwd() метод отображает текущий рабочий каталог.

Синтаксис

os.getcwd()

пример

Ниже приводится пример, чтобы дать текущий каталог -

#!/usr/bin/python3 import os # This would give location of the current directory os.getcwd()

rmdir() Метод

rmdir() метод удаляет каталог, который передается в качестве аргумента в методе.

Перед удалением каталога, все содержимое в нем должно быть удалено.

Синтаксис:

os.rmdir("dirname")

пример

Ниже приводится пример, чтобы удалить "/tmp/test" каталог. Требуется, чтобы дать полное имя каталога, в противном случае он будет искать этот каталог в текущем каталоге.

#!/usr/bin/python3 import os # This would remove "/tmp/test" directory. os.rmdir("/tmp/test")

Файловые и сопутствующие методы

Есть три важные источников, которые предоставляют широкий спектр вспомогательных методов для обработки и манипулирования файлов & каталогов в операционных системах Windows, и Unix. Они заключаются в следующем -

    Файл методов объекта : file объект предоставляет функции для работы с файлами.

    Методы объекта ОС : Это предоставляет методы для обработки файлов, а также каталогов.

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

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

f = open ("text.txt" , "r" )

У функции open много параметров, они указаны в статье " ", нам пока важны 3 аргумента: первый, это имя файла. Путь к файлу может быть относительным или абсолютным. Второй аргумент, это режим, в котором мы будем открывать файл.

Режимы могут быть объединены, то есть, к примеру, "rb" - чтение в двоичном режиме. По умолчанию режим равен "rt".

И последний аргумент, encoding, нужен только в текстовом режиме чтения файла. Этот аргумент задает кодировку.

Чтение из файла

Первый - метод read, читающий весь файл целиком, если был вызван без аргументов, и n символов, если был вызван с аргументом (целым числом n).

>>> f = open ("text.txt" ) >>> f . read (1 ) "H" >>> f . read () "ello world!\nThe end.\n\n" >>> f = open ("text.txt" ) >>> for line in f : ... line ... "Hello world!\n" "\n" "The end.\n" "\n"

Запись в файл

Теперь рассмотрим запись в файл. Попробуем записать в файл вот такой вот список:

>>> l = [ str (i ) + str (i - 1 ) for i in range (20 )] >>> l

Откроем файл на запись:

>>> f = open ("text.txt" , "w" )

Запись в файл осуществляется с помощью метода write:

>>> for index in l : ... f . write (index + " \n " ) ... 4 3 3 3 3

Для тех, кто не понял, что это за цифры, поясню: метод write возвращает число записанных символов.

После окончания работы с файлом его обязательно нужно закрыть с помощью метода close:

>>> f . close ()

Теперь попробуем воссоздать этот список из получившегося файла. Откроем файл на чтение (надеюсь, вы поняли, как это сделать?), и прочитаем строки.

>>> f = open ("text.txt" , "r" ) >>> l = [ line . strip () for line in f ] >>> l ["0-1", "10", "21", "32", "43", "54", "65", "76", "87", "98", "109", "1110", "1211", "1312", "1413", "1514", "1615", "1716", "1817", "1918"] >>> f . close ()

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

Доброго времени суток, дорогие читатели! Продолжаем изучение замечательного языка питон. Сегодня постараюсь в наиболее понятной форме рассказать о работе с файлами.
На самом деле это простая тема, так что, думаю, все пойдет как по маслу.

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

Чтение файла в python:

Итак. Файл,а именно текстовый документ file.txt, находится в той же директории, что и моя программа (в данном случае test.py), так что никакие пути я указывать не буду, хотя это возможно. Путь к файлу может быть как относительный, так и абсолютный.
Сейчас мы попытаемся прочитать, что же в нем написано:

>>>f = open("file.txt", "r") >>>print f.read() Привет! Я - файл:)

Встроенная функция open(file, mode=’r’, buffering=None, encoding=None, errors=None, newline=None, closefd=True) — Открывает файл и возвращает соответствующий поток.
Вторым аргументом (все что в скобочках функции) является режим, в котором мы открываем файл. Есть такие режимы:

‘r’ — открытие на чтение (выступает значением по умолчанию).
‘w’ — открытие на запись, содержимое файла удаляется, если файла с таким именем нет, то он автоматически создается.
‘x’ — открытие на запись, если файл не существует, иначе исключение.
‘a’ — открытие на дозаписывание, информация добавляеться в конец уже существующей информации в файле.
‘b’ — открытие в двоичном режиме.
‘t’ — открытие в текстовом режиме (выступает значением по умолчанию).
‘+’ — открытие на чтение и запись.

Кроме того, вышеперечисленные режимы могут быть объеденённы. По умолчанию режим ‘rt’. Если вы хотите произвести чтение в двоичном режиме, то укажите ‘rb’.
Еще существует аргумент encoding — он задает кодировку и используется только в текстовом режиме чтения файла.

Ну что ж, мы уже познакомились с первым методом read, который считывает информацию с файла. Если в его аргументе ничего не указать, то он выведет всю информацию. Но можно обращаться к файлу с целью побитового вывода. (вспоминаем, что кириллица занимает по 2 байта на символ). Итак пробуем вывести первые 6 букв:

>>> f = open("file.txt", "r") >>> print f.read(12) Привет

Хорошо, а теперь попробуем еще один способ. Используем для этого цикл.

F = open("file.txt", "r") for line in f: print line f.close() >>>Привет! Я - файл:)

После работы с файлом, его нужно обязательно закрыть. Используем для этого метод close() .

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

F = open("file.txt", "w") f.write("string1n") #n - перенос строки f.write("sting2") f.close() # Проверяем, записались ли значения f = open("file.txt", "r") print f.read() f.close() Результат: string1 sting2

Круто, все работает;). Пробуем еще:

F = open("file.txt", "w") f.write("abvgdn") #n - перенос строки f.seek(3) #переход на три байта f.write("0000n") # вставляем после 3 символа и стираем все остальное f.write("hello") f.close() # читаем значение построчно f = open("file.txt", "r") print f.readline() f.close() # читаем ВСЕ строки f = open("file.txt", "r") print f.readlines() f.close() Результат: abv0000 ["abv0000n", "hello"]

Вносим изменения в файл, не затронув при этом старые данные:

F = open("file.txt", "w") f.writelines("test") f.close() f = open("file.txt", "r") print f.read() f.close() Результат: abv0000 ["abv0000n", "hello"] test

На этом пока все. Оставляйте комментарии. Делитесь ссылкой на статью.