2017-02-01 1 views
-1

Извинения, похоже, мое первоначальное объяснение не было ясным, поэтому я обновил ниже, насколько это возможно.Как изменить строку на десятичную и установить значение 2 dp в Python (3.6)

Я создал словарь из списка полей и файла с фиксированной шириной данных, отрезав файл данных вверх.

data_format_keys = { 
      ("CURRENT-RATIO", 120, 127), 
      ("ACID-TEST", 127, 134), 
      ("NOTES", 134, 154 
      } 

При печати на это я получаю следующее ...

Current Ratio = 1234 
Acid Test = 5678 
Notes = These are my notes 

Для данных в Current Ratio (1234) и тест Acid (5678) Мне нужно преобразовать строки в числовые значения и вставки десятичные точки для использования в вычислениях (эти поля взяты из файла мейнфрейма, поэтому их необходимо преобразовать в правильные форматы).

Ожидаемый выход ...

Current Ratio = 12.34 #This is an integer/float 
Acid Test = 5.678 #This is an integer/float 
Notes = These are my notes #This is still a string 

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

 for k,v in data_format_keys.items(): 
      if k in data_format_keys == headerdict[i[1]]: 
       line = line.replace(k, v) 
     fo.write(line) 

print(headerdict) 

Где headerdict - это начальный словарь, а data_format_keys - список полей для преобразования.

Любые мысли? Благодаря

+0

1) Существует много несвязанного кода, это не минимальный пример. 2) Вы имеете в виду ... разделите на 100? –

+0

'float (текст)/100'? – asongtoruin

+0

Я думаю, что деление на 100 будет работать после преобразования значения. Я искал вставить десятичную точку, но это имеет смысл. Благодарю. – Leigh

ответ

0

Попробуйте это:

#createlist from current output 
thelist = [('Current Ratio', 1234), ('Acid Test', 5678), ('Notes', 'These are my notes') ] 
#create dict with just notes 
notes = dict([i for i in thelist if i[0] == "Notes"]) 
#create list without notes 
thelist = [i for i in thelist if i[0] != "Notes"] 
#create list of keys 
thelist1 = [i[0] for i in thelist] 
#create list of formatted numbers 
thelist2 = [float(i[1]/100) for i in thelist] 
#merge into dict 
thelist = dict(zip(thelist1, thelist2)) 
#create empty dict 
desired = {} 
#update dict with previously created dicts 
desired.update(thelist) 
desired.update(notes) 
print (desired) 

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

+0

Не знаете, как применить это к некоторым значениям в словаре? – Leigh

+0

'(« CURRENT-RATIO », 120, 127)' Вы хотите видеть: ** 1201.27 ** или ** 1.20, 1.27 **? – Olufon

+0

{(«CURRENT-RATIO», 120, 127), («ACID-TEST», 127, 134)} Это разделение фиксированного файла, так что 120 - это начальная позиция, 127 - это конец для Current-Ratio. Затем вы берете значение из файла и создаете словарь. Проблема в том, что мне тогда нужно преобразовать это значение и значение для Acid-Test в число для вычислений, но оставить Notes как текст – Leigh

0

Вы можете использовать отформатированный выход, если хотите.

Вот пример:

#Inputs 
meal_cost = float(input("Enter meal price: ")) 
drink_cost = float(input("Enter drinks cost: ")) 

#Calculation 
total_cost = meal_cost + drink_cost 

#Output 
print("Your total bill is {:.2f} USD".format(total_cost)) 

Ваш выход будет выглядеть следующим образом:

Enter meal price: 7.49 
Enter drinks cost: 2.99 
Your total bill is 10.48 USD 

Позвольте мне знать, если это помогло. :)

+0

Не знаете, как применить это к определенным значениям в словаре? – Leigh

Смежные вопросы