Как разделить текстовый файл

05.04.1993:1.068

12.04.1993:1.079

19.04.1993:1.079

06-06-1994: 1.065

13.06.1994:1.073

20.06.1994:1.079


У меня есть текстовый файл для даты-года-цены на газ, и я хочу рассчитать средние цены на газ за год. Поэтому я попытался разделить,

with open('c:/Gasprices.txt','r') as f: 
   fullfile=[x.strip() for x in f.readlines()]
datesprices=[(x.split('-')[0], x.split(':')[1]) for x in fullfile]
print(datesprices)

Но я не могу получить данные о годе и цене, но такие данные.

('04', '1.068'), ('04', '1.079')

пожалуйста, дайте мне знать, что я должен знать.

и, кроме того, дайте мне знать, как использовать разделенные данные для расчета средней цены за год с использованием словаря, если можете.

x.split('-')[0] дает вам день, используйте x.split('-')[2], чтобы получить год.
Titouan L 10.05.2022 16:31

@TitouanL Это даст '1993:1.068'

Sharim Iqbal 10.05.2022 16:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
58
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

ПОПРОБУЙ ЭТО


with open('c:/Gasprices.txt','r') as f: 
    fullfile=[x.strip() for x in f.readlines()]
datesprices=[(x.split('-')[0],x.split('-')[-1].split(':')[0], x.split(':')[1]) for x in fullfile]
print(datesprices)

ВЫХОД

[('04', '1993', '1.068'), ('04', '1993', '1.079'), ('04', '1993', '1.079'), ('06', '1994', '1.065'), ('06', '1994', '1.073'), ('06', '1994', '1.079')]

ИЛИ

with open('c:/Gasprices.txt','r') as f: 
    fullfile=[x.strip() for x in f.readlines()]
datesprices=[(x.split('-')[-1].split(':')[0], x.split(':')[1]) for x in fullfile]
print(datesprices)

ВЫХОД

[('1993', '1.068'), ('1993', '1.079'), ('1993', '1.079'), ('1994', '1.065'), ('1994', '1.073'), ('1994', '1.079')]

Я думаю, что автор хочет только год и цену, чтобы получить среднюю цену за каждый год.

lemon 10.05.2022 16:44

@lemon Thnx, я добавил для обоих.

Sharim Iqbal 10.05.2022 16:48

Как уже было сказано, для получения года нужно использовать немного более сложный сплит. Но ваш формат кажется очень последовательным, вы, вероятно, могли бы пойти на:

datesprices=[(x[6:10], x[11:]) for x in fullfile]

но как получить среднее значение? Вам нужно где-то хранить список за конкретный год.

from statistics import mean

my_dict = {} # could be defaultdict too
for year, price in datesprices:
    if year not in my_dict:
        my_dict[year] = []
    my_dict[year].append(price)

for year, prices in my_dict.items():
    print(year, mean(prices))
    txt = ['04-05-1993:1.068', '04-12-1993:1.079', '04-19-1993:1.079', '06-06-1994:1.065', '06-13-1994:1.073', '06-20-1994:1.079']

    price_per_year = {}
    number_of_years = {}
    for i in txt:
      x = txt.split(':')
      Date = x[0]
      Price = x[1]
      year = date.split('-')[2]

      if year ~in price_per_year.keys:
        price_per_year.update({year:Price})
        number_of_years.update({year:1})
      else:
        price_per_year[year] += Price
        number_of_years[year] += 1
 
av_price_1993 = price_per_year[1993] / number_of_years[1993]
av_price_1994
 = price_per_year[1994] / number_of_years[1994]

Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.

Community 11.05.2022 07:38
Ответ принят как подходящий

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

with open('gas.txt') as gas:
    td = dict()
    for line in gas:
        year = line[6:10]
        price = float(line[11:])
        td.setdefault(year, []).append(price)
    for k, v in td.items():
        print(f'{k} {sum(v)/len(v):.3f}')

Выход:

1993 1.075
1994 1.072

Примечание:

Здесь нет проверки на пустые строки. Предполагается, что их нет и что образец, показанный в вопросе, искажен.

Кроме того, нет необходимости удалять входящие строки, поскольку плавать() невосприимчив к начальным/конечным пробелам.

Я получил вывод хорошо, но я не могу понять код. Можете ли вы объяснить, что означает td=dict()?

ning 10.05.2022 17:21

@Seb Он присваивает ссылку на пустой словарь переменной с именем тд. Вам может показаться интересным: - stackoverflow.com/questions/34370599/…

Lancelot du Lac 10.05.2022 19:49

Другие вопросы по теме