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

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован.

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

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

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