Не могу разобраться как считать только нечетные строки в файле
Вам дана статистика по выручке частной клиники "Врач О" за два месяца 2023 года: ноябрь и декабрь. Информация хранится в текстовых файлах. Структура файлов одинакова: нечетные строки - это название услуги, четные - сумма за услугу, указанной в предыдущей строке.
Необходимо написать функцию analyz(), которая анализирует данные файлы:
Посчитать общую сумму всех услуг за два месяца Посчитать количество неповторяющихся услуг, которые встречались только в ноябре. Результат вывести в виде двух строк: Сумма заработанная за 2 месяца - XXX Количество услуг в ноябре, которых не было в декабре - XXX
Сам код:
import urllib.request, urllib.parse, urllib.error
def copy_file(name):
urllib.request.urlretrieve('https://raw.githubusercontent.com/dmdelicates/DC_task12_3/main/' + name, name)
file_name1 = 'nov_2023.txt' # Название переменной file_name1 не изменять!
file_name2 = 'dec_2023.txt' # Название переменной file_name2 не изменять!
copy_file(file_name1) # После выполнения данной функции в рабочей папке появится файл nov_2023.txt для анализа
copy_file(file_name2) # После выполнения данной функции в рабочей папке появится файл dec_2023.txt для анализа
def analyz():
# Здесь необходимо написать код и проанализировать файлы
with open('nov_2023.txt', 'r', encoding='utf-8') as file:
l = file.readlines()
for l_n in range(len(l)):
if l_n % 2 == 1:
sum = 0
for s in l:
sum += int(s)
with open('dec_2023.txt', 'r', encoding='utf-8') as file:
l1 = file.readlines()
for l_n1 in range(len(l1)):
if l_n1 % 2 == 1:
sum1 = 0
for s1 in l1:
sum1 += int(s1)
sum_all = sum + sum1 # Находим сумму всех услуг за 2 месяца
Ответы (1 шт):
Автор решения: Oopss
→ Ссылка
import sqlite3
import urllib.request, urllib.parse, urllib.error
import os
def creat_base():
con = sqlite3.connect('doctor.db')
cur = con.cursor()
cur.execute(''' CREATE TABLE IF NOT EXISTS services (
id INTEGER PRIMARY KEY,
ser TEXT NOT NULL,
prc INTEGER,
mth TEXT NOT NULL,
yrd TEXT NOT NULL
) ''')
con.commit()
con.close()
return 0
def into_from_file(con, yrd, mth, ser, prc):
cur = con.cursor()
cur.execute('''INSERT INTO services (yrd, mth, ser, prc)
VALUES (?,?,?,?) ''', (yrd, mth, ser, prc))
con.commit()
return 0
def copy_file(name):
urllib.request.urlretrieve('https://raw.githubusercontent.com/dmdelicates/DC_task12_3/main/' + name, name)
return 0
def sum_two_month(con):
'''Посчитать общую сумму всех услуг за два месяца'''
cur = con.cursor()
res = cur.execute('''SELECT SUM(prc)
FROM services''')
return res.fetchone()[0]
def uniq_ser_nov(con):
'''Посчитать количество неповторяющихся услуг, которые встречались только в ноябре.
Количество услуг в ноябре, которых не было в декабре'''
cur = con.cursor()
kol_uniq_nov = cur.execute('''SELECT count(distinct(ser))
FROM services
WHERE mth="nov"''').fetchone()[0]
kol_uniq_nov_and_dec = cur.execute('''SELECT count(distinct(t1.ser))
FROM (SELECT ser FROM services WHERE mth='nov') as t1
INNER JOIN (SELECT ser FROM services WHERE mth='dec') as t2
on t1.ser=t2.ser''').fetchone()[0]
return kol_uniq_nov - kol_uniq_nov_and_dec
def analyz():
con = sqlite3.connect('doctor.db')
print(f'Общая сумма за два месяца составила {sum_two_month(con):,.2f}')
print(f'Количество услуг в ноябре, которых не было в декабре {uniq_ser_nov(con)}')
con.close()
return 0
def fill_data():
if not os.path.isfile('doctor.db'):
creat_base()
file_name = ['nov_2023.txt', 'dec_2023.txt'] # Название переменной file_name не изменять!
for f_name in file_name:
if not os.path.isfile(f_name):
copy_file(f_name) # После выполнения данной функции в рабочей папке появится файл nov_2023.txt для анализа
con = sqlite3.connect('doctor.db')
with open(f_name, 'r', encoding='utf8') as file:
in_f = file.read().split('\n')
mth, yrd = f_name[:f_name.find('.')].split('_')
for ser, prc in zip(in_f[::2], in_f[1::2]):
into_from_file(con, yrd, mth, ser, prc)
con.close()
return 0
def main():
fill_data() # Добавить данные из файла
analyz() # Анализ данных
return 0
if __name__ == '__main__':
main()
Общая сумма за два месяца составила 9,850,568.00
Количество услуг в ноябре, которых не было в декабре 198