Как считать текстовый файл в python
Сегодня мы будем учиться открывать и читать содержимое файлов, используя Python 2.7. И начнем с самого простого примера – выведем на экран содержимое текстового файла. При этом будем использовать интерактивный сценарий с запросом у пользователя имени того или иного файла.
Если вы забыли о том, что такое интерактивный сценарий, как его написать, повторяем урок 16.
Практический пример
Создаем на рабочем столе текстовый файл test15_text.txt и вписываем в него следующий текст:
Итоговая таблица КХЛ выглядит таким образом. На первом месте - Авангард. На втором месте - АкБарс. На третьем месте - СКА.
Сохраняем текстовый файл в кодировке OEM 866. Это нужно для того, чтобы на экране выводились кириллические буквы, а не кракозябры. Как сохранить: в программе Notepad++ нажимаем вверху на: Кодировки — Кодировки -Кириллица — OEM 866 .
Далее создаем на рабочем столе файл test15.py Пишем в него руками следующий программный код:
# -*- coding: utf- 8 -*- from sys import argv script, file = argv text = open(file) print u"Отрываем содержимое файла %r:" % file print text.read() print u"И снова введите имя файла с текстом:" file_snova = raw_input("> ") text_snova = open(file_snova) print text_snova.read()
Итак, начало файла мы уже знаем – мы разбирали переменную argv в предыдущих уроках – здесь и здесь.
Далее следует команда open () , с помощью которой мы и открываем наш файл file, и содержимое которого мы присваиваем переменной text.
Далее выводим просто текст на экран «Отрываем содержимое файла….» И с помощью команды read() выводим переменную text, то есть читаем содержимое текстового файла test15_text.txt
Итак, две команды в этом уроке:
open () — открывает файл
read() — читает содержимое файла
Напоминаю, что %r — это оператор форматирования, вспоминаем операторы форматирования в уроке 10.
После этого попробуем сделать то же самое, но уже с помощью команды raw_input(«> «) Напомню, что эта команда прописывается для создания интерактивного сценария (подробнее об этом в уроке 16). Смотрите, в этом случае мы не прописываем в сценарии название текстового файла, а предлагаем пользователю в интерактивном режиме ввести название этого файла. Это более гибкий вариант открытия файлов в Python, запомните эти два варианта, особенно второй – это пригодится вам в дальнейшей работе.
Теперь открываем программу PowerShell и прописываем команду:
python desktop/test15.py desktop/test15_text.txt
Далее программа вас попросит снова ввести имя файла, вы вводите desktop/test15_text.txt
В итоге у вас должно получиться следующее:
Домашнее задание
Попробуйте выполнить сценарий написания программы, состоящий только из первой части (с использованием переменной argv ) или только из второй части – с использованием команды raw_input(«> «)
В следующем уроке мы разберем еще несколько команд для работы с файлами — перейти в урок 20.
- Вы здесь:
- Главная
- Python 2.7 с нуля
- Урок 19. Чтение содержимого файла в Питоне 2.7: введение
Как читать текстовый файл в Python
Python предоставляет возможность читать, записывать и создавать файлы. Файл может быть двух типов – обычный текстовый и двоичный.
- Текстовые файлы – этот тип файла состоит из обычных символов, оканчивающихся специальным символом. Этот специальный символ называется EOL (конец строки). В Python по умолчанию используется новая строка (‘\n’) .
- Двоичные файлы – в этом формате файла данные хранятся в двоичном формате (1 или 0). В двоичном файле нет символа терминатора для новой строки.
Изучим как прочитать текстовый файл в Python. Python выполняет три необходимых шага для чтения или записи текстового файла:
- открыть файл;
- чтение или запись файла;
- закрыть файл.
Чтение текстового файла
Python предоставляет встроенную функцию open() для открытия файла. В основном она принимает два аргумента: имя файла и режим. Она возвращает объект файла, который также называется дескриптором. Его можно использовать для выполнения различных операций с файлом.
fs = open('example.txt, 'r') # The first argument is the file name, and the second #argument is a mode of the file. Here r means read mode.
Мы можем указать режим файла при открытии файла. Режим файла может быть следующим: чтение r, запись w и добавление a.
Откроем текстовый файл с помощью функции open().
Python предоставляет различные функции для чтения файла, но мы будем использовать наиболее распространенную функцию read(). Она принимает аргумент с именем size, который представляет собой не что иное, как заданное количество символов, считываемых из файла. Если размер не указан, будет прочитан весь файл.
fs = open(r"C:UsersDEVANSH SHARMADesktopexample.txt",'r') # It will read the 4 characters from the text file con = fs.read(4) # It will read the 10 characters from the text file con1 = fs.read(10) # It will read the entire file con2 = fs.read() print(con) fs.close() # It will read the entire file
This is line 1 This is line 2 This is line 3 This is line 4
В приведенном выше коде мы видим, что функция read() считывает символ из файла в соответствии с его заданным размером. Переменная con1 считывает следующие 10 символов из последней функции read(). В последней строке мы закрыли файл после выполнения операции чтения с помощью функции close().
Как считать текстовый файл в python

import pandas as pd df = pd.read_csv('prices.txt', sep ='\t', header = None) df.columns = ['Товар', 'Количество', 'Цена'] df['Итого'] = df['Количество'] * df['Цена'] summa_zakaza = sum(df['Итого']) print(summa_zakaza)
with open('prices.txt') as f: print(sum(eval('*'.join(s.split()[1:])) for s in f))
with open('prices.txt') as f: print(sum(map(lambda x: int(x[1]) * int(x[2]), map(str.split, f.readlines()))))
from functools import reduce with open('prices.txt') as f: file = open('prices.txt', mode='r', encoding='utf-8') print(reduce(lambda x, y: x + int(y[1]) * int(y[2]), [i.split('\t') for i in [i.strip() for i in file.readlines()]], 0))
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека питониста»
Поиск слова в текстовом файле
Напишите программу, которая принимает поисковый запрос и выводит названия текстовых файлов, содержащих искомую подстроку. Все файлы располагаются в директории D:\Python\Textfiles.
Формат ввода
Строка, содержащая поисковый запрос.
Формат вывода
Список текстовых файлов, содержащих введенную пользователем подстроку.
Пример ввода:
словарь
Пример вывода:
challenges-for-beginners-5.md dictionaries-2.md dictionaries.md challenges-for-beginners.md merge-dictionaries.md dictionaries-4.md dictionaries-3.md
Решение
Поскольку слово может встречаться в одном и том же файле несколько раз, есть смысл сохранять результаты поиска во множестве set .
import os if __name__ == '__main__': folder = 'D:\\Python\\Textfiles' answ = set() search = input() for filename in os.listdir(folder): filepath = os.path.join(folder, filename) with open(filepath, 'r', encoding = 'utf-8') as fp: for line in fp: if search in line: answ.add(filename) for i in answ: print(i)
Словарь из CSV-файла
Имеется файл data.csv, содержащий информацию в csv-формате. Напишите функцию read_csv() для чтения данных из этого файла. Она должна возвращать список словарей, интерпретируя первую строку как имена ключей, а каждую последующую строку как значения этих ключей. Функция read_csv() не должна принимать аргументов.
Решение
import csv def read_csv(): with open("data.csv") as f: a = [ for row in csv.DictReader(f, skipinitialspace=True)] return a
def read_csv(): with open('data.csv') as file: keys = file.readline().strip().split(',') return [dict(zip(keys, line.strip().split(','))) for line in file]
def read_csv(): with open('data.csv', encoding='utf-8') as file: info = list(map(lambda x: x.strip().split(','), file.readlines())) return [dict(zip(info[0], j)) for j in info[1:]]
from csv import DictReader def read_csv(): with open('data.csv') as file_object: data = DictReader(file_object) ans = list(data) return ans
def read_csv(): with open("data.csv") as data_file: dict_list = [] keys = data_file.readline().strip().split(",") for values in data_file: dict_list.append(dict(zip(keys, values.strip().split(",")))) return dict_list
Информация о файле
Имеется файл file.txt с текстом на латинице. Напишите программу, которая выводит следующую статистику по тексту:
- количество букв латинского алфавита;
- число слов;
- число строк.
Пример ввода и вывода
Предположим, что file.txt содержит приведенный ниже текст:
Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated.
В этом случае программа должна вывести информацию о файле в следующем виде:
Input file contains: 108 letters 20 words 4 lines
Решение
with open('file.txt') as f: txt = f.read() print('Input file contains:') print(sum(map(str.isalpha, txt)), 'letters') print(len(txt.split()), 'words') print(txt.count('\n') + 1, 'lines')
with open('file.txt') as f: res = f.readlines() f.seek(0) words = f.read().split() let = sum(len([y for y in x if y.isalpha()]) for x in words) print('Input file contains:') print(f' letters') print(f' words') print(f' lines')
with open('file.txt') as f: print('Input file contains:') print(len(list(filter(lambda x: x.isalpha(), f.read()))), 'letters') f.seek(0) print(len(f.read().split()), 'words') f.seek(0) print(len(list(f.readlines())), 'lines')
with open('file.txt') as file: lst = file.read() lines = lst.count('\n') + 1 words = len(lst.split()) letters = len([c for c in lst if c.isalpha()]) print(f'Input file contains:\n letters\n words\n lines')
with open('file.txt') as f: t = f.read() f.seek(0) print('Input file contains:') print(f' letters') print(f' words') print(f' lines')
Запрещенные слова
Напишите программу, которая получает на вход строку с названием текстового файла, и выводит на экран содержимое этого файла, заменяя все запрещенные слова звездочками * (количество звездочек равно количеству букв в слове). Запрещенные слова, разделенные символом пробела, хранятся в текстовом файле forbidden_words.txt. Все слова в этом файле записаны в нижнем регистре. Программа должна заменить запрещенные слова, где бы они ни встречались, даже в середине другого слова. Замена производится независимо от регистра: если файл forbidden_words.txt содержит запрещенное слово exam, то слова exam, Exam, ExaM, EXAM и exAm должны быть заменены на **** .
Формат ввода
Строка текста с именем существующего текстового файла, в котором необходимо заменить запрещенные слова звездочками.
Формат вывода
Текст, отредактированный в соответствии с условием задачи.
Пример ввода вывода
Предположим, что forbidden_words.txt содержит следующие запрещенные слова:
hello email python the exam wor is
А текст файла, подлежащего цензуре, выглядит так:
Hello, world! Python IS the programming language of thE future. My EMAIL is. PYTHON is awesome.
Тогда программа должна вывести отредактированный текст в таком виде:
*****, ***ld! ****** ** *** programming language of *** future. My ***** **. ****** ** awesome.
Решение
with open('forbidden_words.txt') as forbidden_words, open(input()) as to_change: pattern, text = forbidden_words.read().split(), to_change.read() text_lower = text.lower() for word in pattern: text_lower = text_lower.replace(word, '*' * len(word)) result = ''.join((y, x)[x == '*'] for x, y in zip(text_lower, text)) print(result)
with open('forbidden_words.txt') as f: forbidden_words = with open(input()) as f: s = f.read() s_lower = s.lower() for forbidden_word in forbidden_words: s_lower = s_lower.replace(forbidden_word, forbidden_words[forbidden_word]) print(*map((lambda c1, c2: '*' if c2 == '*' else c1), s, s_lower), sep='')
with open("forbidden_words.txt", encoding="utf-8") as file, open(input()) as infile: text = infile.read() for f in file.read().strip("\n").split(): pos = text.lower().find(f) while pos > -1: text = text[:pos] + "*" * len(f) + text[pos+len(f):] pos = text.lower().find(f) print(text)
import re with open(input()) as inp, open('forbidden_words.txt') as fw: text, forbidden = inp.read(), fw.read().split() for i in forbidden: text = re.sub(i, '*' * len(i), text, flags=re.I) print(text)
with open(input(), encoding='utf-8') as r, open('forbidden_words.txt', encoding='utf-8') as s: w = s.read().split() v = r.read() l = v.lower() for i in w: l = l.replace(i, '*' * len(i)) [print(j if j == '*' else i, end='') for i, j in zip(v, l)]
Материалы по теме
- Задача о поврежденной XML-строке
- 5 задач с решениями на Python для начинающих разработчиков
- 5 классических задач по Python для начинающих с решениями
Как считать текстовый файл в python



Скачай курс
в приложении
Перейти в приложение
Открыть мобильную версию сайта
© 2013 — 2023. Stepik
Наши условия использования и конфиденциальности

Public user contributions licensed under cc-wiki license with attribution required
