2017-02-01 2 views
-1

Entschuldigung, es scheint, meine ursprüngliche Erklärung war nicht klar, so habe ich die unten so gut wie möglich aktualisiert.Wie ändere ich eine Zeichenfolge in eine Dezimalstelle und setzen Sie den Wert auf 2 dp in Python (3.6)

Ich habe ein Wörterbuch aus einer Liste von Feldern und einer Datei mit fester Breite erstellt, indem ich die Datendatei aufschneide.

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

Wenn diese Ausdrucken erhalte ich die folgende ...

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

Für die Daten in Current Ratio (1234) und Säure-Test (5678) Ich brauche die Saiten Numerik und Einsatz zu konvertieren Dezimalpunkte zur Verwendung in Berechnungen (diese Felder stammen aus einer Mainframe-Datei und müssen daher in die richtigen Formate konvertiert werden).

Die erwartete Ausgabe ist ...

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 

Ich habe eine Liste von Feldern erstellt, die aus der ursprünglichen Liste umgewandelt werden müssen, aber ich bin zu kämpfen mit, wie die Umwandlung

 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) 
anzuwenden

Wo Headerdict ist das erste Wörterbuch erstellt und data_format_keys ist die Liste der Felder für die Konvertierung.

Irgendwelche Gedanken? Dank

+0

1) Es gibt eine Menge nicht verwandten Code, es ist kein minimales Beispiel. 2) Meinst du ... dividiere durch 100? –

+0

'float (Text)/100'? – asongtoruin

+0

Ich glaube, Division durch 100 würde funktionieren, sobald der Wert konvertiert wird. Ich wollte den Dezimalpunkt einfügen, aber das macht Sinn. Vielen Dank. – Leigh

Antwort

0

Try this:

#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) 

Jemand besser in Python kann möglicherweise effizienteren Code schreiben, aber dies sollte ein guter Ausgangspunkt sein.

+0

Nicht sicher, wie man dies auf bestimmte Werte in einem Wörterbuch obwohl anwendet? – Leigh

+0

'(" CURRENT-RATIO ", 120, 127)' Wollen Sie sehen: ** 1201.27 ** oder ** 1.20, 1.27 **? – Olufon

+0

{("CURRENT-RATIO", 120, 127), ("ACID-TEST", 127, 134)} Dies teilt eine feste Datei so, dass 120 die Startposition ist, 127 das Ende des aktuellen Verhältnisses. Dies nimmt dann einen Wert aus der Datei und erstellt das Wörterbuch. Das Problem, das ich habe, ist, dass ich dann diesen Wert und den Wert für Acid-Test in eine Zahl für Berechnungen konvertieren muss, aber Notizen als Text – Leigh

0

Sie können formatierte Ausgaben verwenden, wenn Sie möchten. Hier

ein Beispiel:

#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)) 

Die Ausgabe wird wie folgt aussehen:

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

Lassen Sie mich wissen, ob dies half. :)

+0

Nicht sicher, wie man das auf bestimmte Werte in einem Wörterbuch anwendet? – Leigh

Verwandte Themen