#python
#python
Вопрос:
Довольно новичок в python и пытается завершить проект, который поможет в работе.
Я использую документ csv, который содержит 3 столбца данных, я хочу, чтобы python зашел в файл, отсортировал ssc и сопоставил соответствующие tprs (поскольку некоторые из них будут иметь 2 tprs) для каждого ssc с коэффициентами. Это выглядит так.
ssc,tpr,rate
0149,01394,OffPeak
0150,00042,Day
0150,00207,Night
0151,00043,Day
0151,00210,OffPeak
0152,00045,Day
0152,00211,Night
0153,00046,Day
Часть моей программы будет искать этот документ после запроса ввода для ssc, чтобы убедиться, что он существует, затем я хочу, чтобы он захватил это ssc
, tpr
оценил и использовал их в отдельном списке словарей или w / e, чтобы я мог использовать их для заполнения других частей моей программы.
Моя первая проблема заключается в том, чтобы просто просмотреть файл и отсортировать все, поскольку я предпочел бы иметь один ssc с tpr1 rate
и tpr2 rate
, например
ssc tpr1 rate tpr2 rate
0151 00043 Day 00210 Offpeak
или, если есть только один tpr и скорость
ssc tpr1 rate
0393 00001 UnrestrictedSingle
Затем мне нужно, чтобы python настроил другую часть моей программы, добавив дополнительную строку, в зависимости от того, сколько существует tprs. итак, если есть только 1, просто добавьте один, но если их 4, то нужно будет добавить 4 строки для tprs
Это выглядит так
ZPI||
ZIN||||||
ISD||
EAH||
EAD|tpr1||
EAD|tpr2||
REG|||
PSC||countofrates|ssc|
IMC|||
GSP|||
IES|||
ZPT|||||
строка, начинающая EAD, — это строка, которую необходимо добавить в зависимости от того, сколько tprs
их существует, и countofrates
ее необходимо изменить в зависимости от того, есть ли 1 или 2
Любая помощь в этом была бы очень признательна! Рад поделиться чем-нибудь дополнительным, если это необходимо
Спасибо!
p.s
Это все, что у меня есть до сих пор в простой форме, поскольку я не могу использовать свой файл для заполнения разделов, которые мне тоже нужны.
fname = open('tprsheettidy.txt')
SSClist = list()
for line in fname:
num = line.split()
ssc = num
for ssc in num:
if ssc in SSClist : continue
SSC = num[0]
SSClist.append(SSC)
print("""What flow would you like to make? D0019 and D0086""")
Dflow = input("> ")
prompt = '> '
if Dflow == "D0019 and D0086":
print("please enter the SSC")
SSC = input ("> ")
if SSC in SSClist:
print(SSC,"is a valid SSC")
if SSC == "0393":
print(f"What is the current time and date?")
TAD = input(prompt)
print(f"What is the MPAN?")
MPAN = input(prompt)
print(f"What is the supply start date")
REGI = input(prompt)
print(f"What is the EAC?")
EAC = input(prompt)
print(f"Please enter the GPS code")
GSP = input(prompt)
print(f"What is the Meter Serial Number?")
MSN = input(prompt)
print(f"Please enter 'c' for customer read or 'd' for an estimated read")
READTYPE = input(prompt)
print(f"What is the REG ID?")
REGID1 = input(prompt)
print(f"Please enter the meter reading")
METERREADING1 = input(prompt)
print(f"""ZHV|000000|D0119001|X|PSUK|D|LBSL|{TAD}||||OPER|
ZPI|652|
ZIN|47862|NH09|{MPAN}|||
ISD|{REGI}|
EAH|{REGI}|
EAD|00001|{EAC}|
REG|{REGI}|PSUK|
PSC|20170727|1|0393|
IMC|20200507|A|
GSP|19960401|{GSP}|
IES|20200507|E|
ZPT|000000|10|1|{TAD}|
ZHV|000000|D0086002|X||D||{TAD}||||OPER|
196|{MPAN}|V|
197|{MSN}|{READTYPE}|
198|{REGID1}|{REGI}000000|{METERREADING1}||T|N|
ZPT|000000|3||1|{TAD}|
""")
elif SSC == "0151":
print(f"What is the current time and date?")
TAD = input(prompt)
print(f"What is the MPAN?")
MPAN = input(prompt)
print(f"What is the supply start date")
REGI = input(prompt)
print(f"What is the EAC?")
EAC = input(prompt)
EACDAY = (0.66 * float(EAC))
EACNIGHT = (0.33 * float(EAC))
print(f"Please enter the GPS code")
GSP = input(prompt)
print(f"What is the Meter Serial Number?")
MSN = input(prompt)
print(f"Please enter 'c' for customer read or 'd' for an estimated read")
READTYPE = input(prompt)
print(f"What is the first REG ID?")
REGID1 = input(prompt)
print(f"What is the second REG ID?")
REGID2 = input(prompt)
print(f"Please enter the meter reading for REGID {REGID1}")
METERREADING1 = input(prompt)
print(f"Please enter the meter reading for REGID {REGID2}")
METERREADING2 = input(prompt)
print(f"""ZHV|000000|D0119001|X|PSUK|D|LBSL|{TAD}||||OPER|
ZPI|652|
ZIN|47862|NH09|{MPAN}|||
ISD|{REGI}|
EAH|{REGI}|
EAD|00043|{EACDAY}|
EAD|00210|{EACNIGHT}|
REG|{REGI}||
PSC|20170727|1|0393|
IMC|20200507|A|
GSP|19960401|{GSP}|
IES|20200507|E|
ZPT|000000|10|1|{TAD}|
ZHV|000000|D0086002|X||D||{TAD}||||OPER|
196|{MPAN}|V|
197|{MSN}|{READTYPE}|
198|{REGID1}|{REGI}000000|{METERREADING1}||T|N|
198|{REGID2}|{REGI}000000|{METERREADING2}||T|N|
ZPT|000000|3||1|{TAD}|
""")
это работает только для двух конкретных ssc: 0393 и 0151, но поскольку в файле их гораздо больше, я хочу иметь возможность заполнить их в этой программе.
Еще раз спасибо
Комментарии:
1. у вас есть какой-либо код для показа?
2. Мне неясно, откуда берется начало строк во второй части (например
ZP
,ZIN
, …) и что означает «добавление дополнительной строки»? Кроме того, из того, что вы написали, похоже, что каждая вторая строка в вашем csv-файле пуста?3. извините, я просто привыкаю к тому, как правильно это форматировать. Я надеюсь, что то, что я добавил и изменил, немного поможет. Я все еще новичок в этом, и, возможно, я не очень хорошо объясняю, что я пытаюсь сделать…
4. Знаете ли вы
csv
, что в стандартной библиотеке есть модуль? Вы пробовали читать его документацию?
Ответ №1:
Вы можете легко создавать словари из файла CSV с помощью pandas.
In [1]: import pandas as pd
In [2]: mydata = pd.read_csv('mydata.csv', dtype=str)
In [3]: myssc = mydata.loc[mydata['ssc'] == '0151', :]
In [4]: print(f'Number of tprs: {myssc.shape[0]}')
Number of tprs: 2
In [6]: mydict = myssc.loc[:, ['tpr', 'rate']].to_dict()
In [7]: mydict
Out[7]: {'tpr': {3: '00043', 4: '00210'}, 'rate': {3: 'Day', 4: 'OffPeak'}}
In [8]: mydict = myssc.loc[:, ['tpr', 'rate']].to_dict('records')
In [9]: mydict
Out[9]: [{'tpr': '00043', 'rate': 'Day'}, {'tpr': '00210', 'rate': 'OffPeak'}]
pandas.DataFrame.to_dict()
Метод имеет много вариантов для размещения dicts по-разному в зависимости от ваших потребностей.
Комментарии:
1. Удивительно! Неиспользуемые pandas мне нужно пойти поиграть и посмотреть, что я могу сделать. Большое вам спасибо за ваш ответ, безусловно, на шаг ближе