Как проверить содержимое файла в python
Чтобы открыть текстовый файл на запись, необходимо применить режим w (перезапись) или a (дозапись). Затем для записи применяется метод write(str) , в который передается записываемая строка. Стоит отметить, что записывается именно строка, поэтому, если нужно записать числа, данные других типов, то их предварительно нужно конвертировать в строку.
Запишем некоторую информацию в файл «hello.txt»:
with open("hello.txt", "w") as file: file.write("hello world")
Если мы откроем папку, в которой находится текущий скрипт Python, то увидем там файл hello.txt. Этот файл можно открыть в любом текстовом редакторе и при желании изменить.
Теперь дозапишем в этот файл еще одну строку:
with open("hello.txt", "a") as file: file.write("\ngood bye, world")
Дозапись выглядит как добавление строку к последнему символу в файле, поэтому, если необходимо сделать запись с новой строки, то можно использовать эскейп-последовательность «\n». В итоге файл hello.txt будет иметь следующее содержимое:
hello world good bye, world
Еще один способ записи в файл представляет стандартный метод print() , который применяется для вывода данных на консоль:
with open("hello.txt", "a") as hello_file: print("Hello, world", file=hello_file)
Для вывода данных в файл в метод print в качестве второго параметра передается название файла через параметр file. А первый параметр представляет записываемую в файл строку.
Чтение файла
Для чтения файла он открывается с режимом r (Read), и затем мы можем считать его содержимое различными методами:
- readline() : считывает одну строку из файла
- read() : считывает все содержимое файла в одну строку
- readlines() : считывает все строки файла в список
Например, считаем выше записанный файл построчно:
with open("hello.txt", "r") as file: for line in file: print(line, end="")
Несмотря на то, что мы явно не применяем метод readline() для чтения каждой строки, но в при переборе файла этот метод автоматически вызывается для получения каждой новой строки. Поэтому в цикле вручную нет смысла вызывать метод readline. И поскольку строки разделяются символом перевода строки «\n», то чтобы исключить излишнего переноса на другую строку в функцию print передается значение end=»» .
Теперь явным образом вызовем метод readline() для чтения отдельных строк:
with open("hello.txt", "r") as file: str1 = file.readline() print(str1, end="") str2 = file.readline() print(str2)
hello world good bye, world
Метод readline можно использовать для построчного считывания файла в цикле while:
with open("hello.txt", "r") as file: line = file.readline() while line: print(line, end="") line = file.readline()
Если файл небольшой, то его можно разом считать с помощью метода read() :
with open("hello.txt", "r") as file: content = file.read() print(content)
И также применим метод readlines() для считывания всего файла в список строк:
with open("hello.txt", "r") as file: contents = file.readlines() str1 = contents[0] str2 = contents[1] print(str1, end="") print(str2)
При чтении файла мы можем столкнуться с тем, что его кодировка не совпадает с ASCII. В этом случае мы явным образом можем указать кодировку с помощью параметра encoding :
filename = "hello.txt" with open(filename, encoding="utf8") as file: text = file.read()
Теперь напишем небольшой скрипт, в котором будет записывать введенный пользователем массив строк и считывать его обратно из файла на консоль:
# имя файла FILENAME = "messages.txt" # определяем пустой список messages = list() for i in range(4): message = input("Введите строку " + str(i+1) + ": ") messages.append(message + "\n") # запись списка в файл with open(FILENAME, "a") as file: for message in messages: file.write(message) # считываем сообщения из файла print("Считанные сообщения") with open(FILENAME, "r") as file: for message in file: print(message, end="")
Пример работы программы:
Введите строку 1: hello Введите строку 2: world peace Введите строку 3: great job Введите строку 4: Python Считанные сообщения hello world peace great job Python
Файлы в python, ввод-вывод
Эта статья посвящена работе с файлами (вводу/выводу) в Python: открытие, чтение, запись, закрытие и другие операции.
Файлы Python
Файл — это всего лишь набор данных, сохраненный в виде последовательности битов на компьютере. Информация хранится в куче данных (структура данных) и имеет название «имя файла» (filename).
В Python существует два типа файлов:
Текстовые файлы
Это файлы с человекочитаемым содержимым. В них хранятся последовательности символов, которые понимает человек. Блокнот и другие стандартные редакторы умеют читать и редактировать этот тип файлов.
Текст может храниться в двух форматах: ( .txt ) — простой текст и ( .rtf ) — «формат обогащенного текста».
Бинарные файлы
В бинарных файлах данные отображаются в закодированной форме (с использованием только нулей (0) и единиц (1) вместо простых символов). В большинстве случаев это просто последовательности битов.
Они хранятся в формате .bin .
Любую операцию с файлом можно разбить на три крупных этапа:
- Открытие файла
- Выполнение операции (запись, чтение)
- Закрытие файла
Открытие файла
Метод open()
В Python есть встроенная функция open() . С ее помощью можно открыть любой файл на компьютере. Технически Python создает на его основе объект.
f = open(file_name, access_mode)
- file_name = имя открываемого файла
- access_mode = режим открытия файла. Он может быть: для чтения, записи и т. д. По умолчанию используется режим чтения ( r ), если другое не указано. Далее полный список режимов открытия файла
Пример
Создадим текстовый файл 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) # чтение 7 символов из example.txt 'This is '
Интерпретатор прочитал 7 символов файла и если снова использовать функцию read() , то чтение начнется с 8-го символа.
>>> f.read(7) # чтение следующих 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 в файл Hello World >>> f.close() # закрытие файла
Переименование файлов в Python
Функция rename()
Функция rename() используется для переименовывания файлов в Python. Для ее использования сперва нужно импортировать модуль os.
import os os.rename(src,dest)
- src = файл, который нужно переименовать
- dest = новое имя файла
Пример
>>> import os >>> # переименование xyz.txt в abc.txt >>> os.rename("xyz.txt","abc.txt")
Текущая позиция в файлах Python
В Python возможно узнать текущую позицию в файле с помощью функции tell() . Таким же образом можно изменить текущую позицию командой seek() .
Пример
>>> f = open('example.txt') # example.txt, который мы создали ранее >>> f.read(4) # давайте сначала перейдем к 4-й позиции This >>> f.tell() # возвращает текущую позицию 4 >>> f.seek(0,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) | добавляет последовательность строк в файл |
Проверка на изменение содержимого файла
Такая проблема. У пользователя есть возможность открыть текстовый файл, нажав кнопку. Он может что-то добавить в этот файл или оставить как есть. При этом действия должны заносится в журнал действий: т.е. там будут записи: «username открыл файл» , если пользователь изменил содержимое, то должна быть подпись «username изменил содержимое». Запись об открытии я реализовал, но как сделать об изменении. Т.е. программа должна как-то сравнивать файл до открытия и после его закрытия наверно, и если есть изменения, то записывать это в журнал. Но как это реализовать, никак не доходит. Помогите пожалуйста. Код с фукнцией:
def user1(): #Окно пользователя root4 = Tk() root4.title('Окно пользователя') ab = Label(text='О программе', width=40) but_ch = Button(text='Сменить пароль', width=40, command=lambda: [root4.destroy(), change()]) but_return = Button(text='Назад', width=40, command=lambda: [root4.destroy(), login2()]) but_fl = Button(text='Открыть файл для изменения', width=40, command=lambda: [os.startfile('users\\files\\GGWP.txt'), inf()]) def inf(): f = open('users' + '\\' + 'actions' + '\\' + 'act.txt', 'a') date = datetime.datetime.now() f.write('Открыт файл, ' + name + ', ' + str(date) + '\n') f.close() ab.pack() but_ch.pack() but_fl.pack() but_return.pack() root4.mainloop()
Отслеживать
задан 19 ноя 2021 в 12:55
Baron_Samedi Baron_Samedi
15 6 6 бронзовых знаков
А нужно записывать только сам факт изменения или и какие строки на что поменялись, например?
19 ноя 2021 в 15:16
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Можете проверить содержимое файла оператором сравнения == после того, как пользователь закрыл файл.
Отслеживать
51.6k 200 200 золотых знаков 61 61 серебряный знак 242 242 бронзовых знака
ответ дан 19 ноя 2021 в 14:56
1 3 3 бронзовых знака
В текущем виде ваш ответ непонятен. Пожалуйста, нажмите править под сообщением, чтобы добавить больше подробностей, которые помогут другим понять, как он отвечает на заданный вопрос. Вы можете найти больше информации о том, как писать хорошие ответы в Справке.
Прочитать файл, проверить содержимое и отредактировать
Кратко:
У нас создается Logфайл — ruta.txt путь к которому знаем, текст которого при создании всегда разный, файл нужно прочесть, и если находим точное совпадение строки номер 3 (In God i trust), значит файл нужный, работаем дальше с ним. Если нету такой строки, то файл удаляем. После генерации нового файла повторяем цикл поиска нужной строки.
Задача 1:
По известному нам пути генерируется файл «/homies/kijon/work/ruta.txt» в искомом нами файле строка номер 3 имеет вид In God i trust
1 2 3 4 5 6 7 8 9 10 11 12
# -*- coding: UTF-8 -*- basefile = '/homies/kijon/work/ruta.txt' timelogruta = '/homies/kijon/work/timelog.txt' import sys temp2 = sys.stdout.write sys.stdout = open(timelogruta, 'a') #открываем файл timelog.txt для записи туда строки номер 3 из файла ruta.txt with open(basefile, 'r') as f: data = f.readlines()[3] #читаем строку номер 3 print data sys.stdout.close() sys.stdout = temp2
#Далее предполагалось проверять полученную строку в файле timelog.txt для проверки на совпадение строки вида In God i trust — если значение совпадет, то данный проверяемый файл ruta.txt тот, что нам нужен, если нет, то мы должны его удалить, и начать круг заново.
#как это сделать, не могу сообразить.
Задача 2:
После того как мы нашли искомый файл ruta.txt, в нем нужно будет заменить еще несколько строк, номера которых мне известно.
а) К примеру прочесть строку 10 и заменить ею строку 11
б) Прочесть строку 20 и заменить ею строку 21
Лучшие ответы ( 1 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Записать в текстовый файл содержимое Edit, и прочитать содержимое файла в Memo
Создать приложение которое создает текстовый файл текстовый файл text.txt записывает в него текст.

Прочитать содержимое dbf (файл SER.Dbf). И вывести содержимое нескольких полей
Всем привет) Можете пожалуйста помочь, может кто хорошо разбирается в работе с dbf файлами.
Отредактировать и переписать в другой файл содержимое данного файла
В файле содержатся данные о книгах: название, фамилия первого автора, количество экземпляров и.

Прочитать файл и вывести его содержимое на экран
Программа выводит нужный текст из программы. Ну при этом еще выдает ошибку, как ее убрать? .model.
23 / 23 / 14
Регистрация: 01.05.2015
Сообщений: 180

Сообщение было отмечено sayiko как решение
Решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#!/usr/bin/env python # -*- coding: utf-8 -*- import os def replace_word(): temp = 0 temp_list = [] word = "строка-образец" filename = 'example.txt' with open(filename, 'r') as file: for item in file: temp += 1 if temp == 3: if word in item: print ("ok") else: print ("error") os.remove(filename) return 0 temp_list.extend([item]) temp_list[5] = temp_list[3] #здесь указываем какую строку заменить with open(filename, 'w') as file: for item in temp_list: file.write(item) if __name__ == '__main__': replace_word()
![]()
5890 / 3348 / 1034
Регистрация: 03.11.2009
Сообщений: 9,977
Сообщение от ampermetr 
зарезервировано в python2.
ограничений не было в задаче, поэтому
1 2 3 4 5 6
with open('input.txt') as in_file, open('output.txt', 'w') as out_file: content = in_file.readlines() if content[2] == 'In God i trust\n': content[10] = content[9] content[20] = content[19] out_file.writelines(content)
Регистрация: 21.01.2016
Сообщений: 10
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#!/usr/bin/env python # -*- coding: utf-8 -*- import os def replace_word(): temp = 0 temp_list = [] word = "строка-образец" filename = 'example.txt' with open(filename, 'r') as file: for item in file: temp += 1 if temp == 3: if word in item: print ("ok") else: print ("error") file.close() # . Вот тут, видимо в спешке, была пропущена строка, без нее файл не удаляется в следующей строке os.remove(filename) return 0 temp_list.extend([item]) temp_list[5] = temp_list[3] #здесь указываем какую строку заменить with open(filename, 'w') as file: for item in temp_list: file.write(item) if __name__ == '__main__': replace_word()
ampermetr — благодарю вас, за то, что поняли именно полно мою проблему в виде Задачи 1 и Задачи 2. Вы решили именно так, как я хотел:
Определили по заданной строке на совпадение, нужный нам файл, сделали замену строк выбранной по номеру строки, таким же образом я смогу менять больше строк в этом же документе, а если искомая строка не подтверждает нужный документ, мы его удаляем.
Jabbson — Ваш пример, работает в точности как я предполагал его решить изначально и показывает решение части моей задачи 1 и задачи 2 по замене строк, Но копирует все данные из одного в другой текстовый документ с которым и работаем потом, что я понял лишнее, можно и без этого. Реализован способ чуть иначе, что в особенности дает очередную возможность познать разные способы решения. Просто изначальный ход моей мысли, ввиду начинаний изучения Python 2.7 полон лишних действий.
Благодарю вас за быстрые и качественные ответы, удачи вам и процветания в ваших делах.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Сохранить содержимое ListBox в файл и прочитать обратно
Как сделать что бы при нажатии на кнопку в лист бокс записывался текст из текстбокс.И сохранялось.
Прочитать файл, и вывести содержимое файла в 1-ю видеостраницу
Здравствуйте уважаемые! Решил попробовать небольшой примерчик на основе выученного материала, и.

Как прочитать файл и вывести его содержимое?
В ссылках, которые я нахожу по данной теме, всегда говорится о поиске или сортировке данных в.
Прочитать файл по ссылке и записать его содержимое в переменную BYTE
Здравствуйте! Нужна помощь. :wall: Всё ещё ломаю голову и не могу это реализовать, постепенно.
Открыть файл, прочитать его, и вывести содержимое в виде массива
Здравствуйте ! Я начинающий программист. пожалуйста подскажите в чём состоит ошибка. я подозреваю.
