2016-04-21 14 views
0

Meine Gruppe und ich erstellen ein Programm, um Bargeld/Kredit-Ausgaben aufzuzeichnen und sie in eine CSV-Datei zu schreiben. Mit unserem Code möchten wir in der Lage sein, die Art der Ausgaben zu vermitteln (1 = Unterhaltung, 2 = Lebensmittel/Lebensmittel usw.) und wie hoch die Ausgaben waren. Der Code funktioniert gut, wenn der Ausgabenbetrag im einstelligen Bereich liegt, wie beispielsweise [1] [5], was bedeutet, dass es sich um eine 5-USD-Unterhaltungsausgabe handelt. Wenn wir jedoch, sagen wir, $ 55 Dollar ausgeben, trennt es es weiter als [1] [5] [5], wenn wir die CSV-Datei öffnen. Gibt es eine Möglichkeit, wie wir unsere Werte in der CSV-Datei ändern können, z. B. indem wir [1] [55] schreiben, um $ 55 in Unterhaltungskosten auszudrücken?(Python) - Brauchen Sie Hilfe mit dem CSV-Writer

Das entsprechende Code-Snippet ist unten als Referenz. Vielen Dank im Voraus für Ihre Hilfe. Oh, und wir benutzen Python 2.7 für unsere Programmierung.


 if expense_type == '1': 
      print 'Enter Expense Type and Amount\n' \ 
        '1. Entertainment\n' \ 
        '2. Food/Groceries\n' \ 
        '3. Gas/Maintenance/Travel\n' \ 
        '4. School/Work\n' \ 
        '5. Misc.\n' 

      while True: 
       exp_type = raw_input('Enter Expense Type Option Number\n') 
       exp_amt = raw_input('Enter Expense Amount') 
       cash_exp_log[exp_type] = exp_amt 

       print 'Would You Like To Record Another Cash Expense?' 
       go_again = raw_input('Y/N\n') 

       if go_again == 'N': 
        break 


      with open('cash_exp.csv', 'a+') as csvfile: 
       writer = csv.writer(csvfile) 
       for key, value in cash_exp_log.items(): 
        writer.writerow((key + value)) 
      break 

+0

Es gibt keinen CSV-Lesecode? – jDo

+0

Ich glaube, die Zeile: "mit open ('cash_exp.csv', 'a +') als csvfile:" beinhaltet das Lesen des Codes sowie das Anhängen an den Code. Korrigiere mich, wenn ich mich irre. – kraderic

+0

Ja, Sie können * und * schreiben, aber im Beispiel schreiben Sie nur, und das Lesen der Datei könnte ebenfalls relevant gewesen sein. Wie auch immer, es scheint, du hast eine Antwort gefunden, die funktioniert hat. – jDo

Antwort

1

Das Problem ist in der Linie writer.writerow((key + value)). Die writerow() Methode verwendet eine Python iterable, die ungefähr "alles ist, was Sie einer for-Schleife geben können". writerow() nimmt das iterable, iteriert es und setzt jedes Element, das es von der Iteration erhält, in eine Zelle in der CSV - es setzt Kommas zwischen sie (und tut einige andere Formatierungen).

Der Wert, der im Vorbeigehen ist ist eine Zeichenkette (das Ergebnis der key und value verketten), und wenn Sie einen String iterieren, erhalten Sie jedes Zeichen:

>>> for letter in "hello": 
...  print letter 
... 
h 
e 
l 
l 
o 

Wenn also das kombinierte String ist nur 2 Zeichen lang - weil der Ausgabencode immer 1 Ziffer ist und der Ausgabenbetrag auch 1 Ziffer ist - erhalten Sie 2 Spalten; Wenn der Ausgabenbetrag jedoch 2 (oder mehr) Ziffern beträgt, erhalten Sie zusätzliche Spalten.

Nach den Klammern zu urteilen, die Sie um den Ausdruck key + value gewickelt haben, vermute ich, was Sie tun sollten, ist, ein Tupel an writerow() zu übergeben. Um das zu tun, wollen Sie (key, value) verwenden - das Komma macht es zu einem Tupel.

+0

Ich habe (Schlüssel + Wert) zu (Schlüssel, Wert) geändert und soweit ich sehen kann, funktioniert es jetzt wie beabsichtigt. Vielen Dank für die Information über die Verkettung, die zu einer Zeichenkette und nicht zu einem Tupel führt, ich werde es an meine Gruppe weitergeben. – kraderic