Не могу разобраться как считать только нечетные строки в файле

Вам дана статистика по выручке частной клиники "Врач О" за два месяца 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
→ Ссылка