Share This
Связаться со мной
Крути в низ
Categories
//Задачи на языке Python для начинающих с решениями. Работа с файлами

Задачи на языке Python для начинающих с решениями. Работа с файлами

Начинаем изучать инструменты Python, предназначенные для работы с текстовыми файлами форматов .txt, .md и .csv: напишем программы для поиска и замены слов, подсчета стоимости товаров, получения статистики по тексту и преобразования информации из csv-файла в словарь.

zadachi na jazyke python dlja nachinajushhih s reshenijami rabota s fajlami 5179e32 - Задачи на языке Python для начинающих с решениями. Работа с файлами

Стоимость заказа

Имеется текстовый файл prices.txt с информацией о заказе из интернет магазина. В нем каждая строка с помощью символа табуляции t разделена на три колонки:

  • наименование товара;
  • количество товара (целое число);
  • цена (в рублях) товара за 1 шт. (целое число).

Напишите программу, подсчитывающую общую стоимость заказа.

Решение

Способ 1:

         from operator import mul with open('prices.txt') as file: 	print(sum(map(lambda line: mul(*map(int, line.split()[1:])), file)))      

Способ 2:

         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)      

Способ 3:

         with open('prices.txt') as f: 	print(sum(eval('*'.join(s.split()[1:])) for s in f))     

Способ 4:

         with open('prices.txt') as f: 	print(sum(map(lambda x: int(x[1]) * int(x[2]), map(str.split, f.readlines()))))     

Способ 5:

         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:PythonTextfiles.

Формат ввода

Строка, содержащая поисковый запрос.

Формат вывода

Список текстовых файлов, содержащих введенную пользователем подстроку.

Пример ввода:

         словарь     

Пример вывода:

         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() не должна принимать аргументов.

Решение

Способ 1:

         import csv def read_csv(): 	with open("data.csv") as f:     	a = [{k: v for k, v in row.items()}         	for row in csv.DictReader(f, skipinitialspace=True)]     	return a     

Способ 2:

         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]     

Способ 3:

         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:]]     

Способ 4:

         from csv import DictReader def read_csv(): 	with open('data.csv') as file_object:     	data = DictReader(file_object)     	ans = list(data) 	return ans      

Способ 5:

         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     

Решение

Способ 1:

         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')      

Способ 2:

         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'{let} letters') print(f'{len(words)} words') print(f'{len(res)} lines')      

Способ 3:

         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')     

Способ 4:

         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} lettersn{words} wordsn{lines} lines')     

Способ 5:

         with open('file.txt') as f: 	t = f.read() 	f.seek(0) 	print('Input file contains:') 	print(f'{len(list(filter(str.isalpha, t)))} letters') 	print(f'{len(t.split())} words') 	print(f'{len(f.readlines())} 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!!!!       

Решение

Способ 1:

         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)     

Способ 2:

         with open('forbidden_words.txt') as f: 	forbidden_words = {word: '*' * len(word) for word in f.read().split()} 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='')      

Способ 3:

         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)     

Способ 4:

         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)     

Способ 5:

         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 для начинающих с решениями

  • 66 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close