2016-11-22 7 views
1

Ich bin ziemlich neu in Python und brauche ein wenig Hilfe hier.Bell Zeichen als Felder Trennzeichen in Python Druckausgabe

Ich habe ein Python-Skript auf Python 2.6, das einige JSON analysiert.

Beispielcode:

if "prid" in data[p]["prdts"][n]: 
    print data[p]["products"][n]["prid"], 

    if "metrics" in data[p]["prdts"][n]: 
     lenmet = len(data[p]["prdts"][n]["metrics"]) 
     i = 0 
     while (i < lenmet): 
      if (data[p]["prdts"][n]["metrics"][i]["metricId"] == "price"): 
       print data[p]["prdts"][n]["metrics"][i]["metricValue"]["value"] 
       break 

Nun druckt diese Werte in zwei Spalten:

prid price  
123 20  
234 40 

Wie Sie die Felder siehe oben Separator ' '. Wie kann ich ein Feldtrennzeichen wie BEL-Zeichen in die Ausgabe einfügen?

Probe erwartete Ausgabe:

prid price  
123^G20  
234^G40 

Antwort

0

FWIW, Ihre while Schleife wird nicht erhöht i, so wird es Schleife für immer, aber ich nehme an, dass nur eine Kopie & Paste Fehler war, und ich werde ignoriere es im Rest meiner Antwort.


Wenn Sie zwei separate print Anweisungen verwenden möchten, dass Ihre Daten auf eine Zeile drucken Sie diesen Raum nicht vermeiden können, die durch die erste print Anweisung erzeugt bekommen. Speichern Sie stattdessen einfach die prid-Daten, bis Sie sie mit dem Preis auf einmal mit der String-Verkettung ausdrucken können. ZB

if "prid" in data[p]["prdts"][n]: 
    prid = [data[p]["products"][n]["prid"]] 

    if "metrics" in data[p]["prdts"][n]: 
     lenmet = len(data[p]["prdts"][n]["metrics"]) 
     i = 0 
     while (i < lenmet): 
      if (data[p]["prdts"][n]["metrics"][i]["metricId"] == "price"): 
       price = data[p]["prdts"][n]["metrics"][i]["metricValue"]["value"] 
       print str(prid) + '\a' + str(price) 
       break 

Beachten Sie, dass ich explizit die prid und den Preis in Zeichenfolge umwandelt. Wenn eines dieser Elemente bereits eine Zeichenfolge ist, müssen Sie es natürlich nicht in str() umbrechen. Normalerweise können wir, lassen print für uns Objekte in String konvertieren, aber wir können

print prid, '\a', price 

hier nicht tun, weil das uns einen unerwünschten Raum zwischen jedem Punkt geben wird.


Ein weiterer Ansatz ist die Verwendung der neuen print() Funktion zu machen, die wir am Anfang des Skripts mit einem __future__ Import importieren können, bevor andere Importe:

from __future__ import print_function 

# ... 

if "prid" in data[p]["prdts"][n]: 
    print(data[p]["products"][n]["prid"], end='\a') 

    if "metrics" in data[p]["prdts"][n]: 
     lenmet = len(data[p]["prdts"][n]["metrics"]) 
     i = 0 
     while (i < lenmet): 
      if (data[p]["prdts"][n]["metrics"][i]["metricId"] == "price"): 
       print(data[p]["prdts"][n]["metrics"][i]["metricValue"]["value"]) 
       break 

I don Ich verstehe nicht, warum Sie BEL als Trennzeichen und nicht als konventioneller verwenden möchten, z. B. TAB. Die BEL-Zeichenfolge wird in Ihrem Terminal möglicherweise als^G gedruckt, ist aber in meinem nicht sichtbar. Wenn Sie diese Ausgabe in einer Textdatei speichern, wird sie möglicherweise in einem Text-Viewer/Editor nicht korrekt angezeigt.


BTW, wäre es besser gewesen, wenn Sie ein Minimal, Complete, Verifiable Example geschrieben, die, anstatt all diese verrückten JSON Parsen Sachen, die nur Ihre Frage, als es wirklich ist aussehen komplizierter machen auf dem tatsächliche Druckproblem konzentriert, und macht es unmöglich, Ihren Code oder seine Änderungen daran zu testen.

+0

Danke PM 2Ring. Ich entschuldige mich dafür, die Frage zu komplizieren oder nur einen Teil der Frage zu stellen. Die ganze Idee ist, dass ich einen Datensatz habe und ich muss den Preis und den Titel hinzufügen.Der Preis und der Titel können durch Anrufen eines Dienstes abgerufen werden. Jetzt dachte ich daran, die ID, den Preis und den Titel aus dem Service zu holen und dann zu einer MySQL-Tabelle hinzuzufügen. Dann mit den anderen Daten auf ID verbinden. Der Titel hat '' und wenn ich versuche, die Daten zu laden, die '' als das Trennzeichen haben, würde es den Titel teilen. Daher wollte ich BEL-Charakter verwenden. Wie auch immer, beide Lösungen haben für mich funktioniert. Vielen Dank. – donny

+0

@donny Ich bin froh, dass meine Antwort Ihnen geholfen hat. Bitte beachten Sie [akzeptieren] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work). Verwenden Sie statt BEL lieber TAB. Oder Sie können Strings mit Leerzeichen in Anführungszeichen einschließen. Ich benutze nicht mysql, aber _could_ funktioniert. –

Verwandte Themen