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')
пожалуйста, дайте мне знать, что я должен знать.
и, кроме того, дайте мне знать, как использовать разделенные данные для расчета средней цены за год с использованием словаря, если можете.
@TitouanL Это даст '1993:1.068'






ПОПРОБУЙ ЭТО
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 Thnx, я добавил для обоих.
Как уже было сказано, для получения года нужно использовать немного более сложный сплит. Но ваш формат кажется очень последовательным, вы, вероятно, могли бы пойти на:
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]
Ваш ответ может быть улучшен с помощью дополнительной вспомогательной информации. Пожалуйста, редактировать, чтобы добавить дополнительную информацию, например цитаты или документацию, чтобы другие могли подтвердить правильность вашего ответа. Дополнительную информацию о том, как писать хорошие ответы, можно найти в справочном центре.
Я не вижу необходимости разбивать строки ввода, так как они имеют фиксированный формат даты, т.е. ее длина известна. Поэтому мы можем просто нарезать.
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()?
@Seb Он присваивает ссылку на пустой словарь переменной с именем тд. Вам может показаться интересным: - stackoverflow.com/questions/34370599/…
x.split('-')[0]дает вам день, используйтеx.split('-')[2], чтобы получить год.