Seite 1 von 1

List in txt speichern ohne klammern anführungszeichen ...

Verfasst: Donnerstag 26. Februar 2015, 08:13
von sbfly
Hallo

Ich will eine Liste von Werten in eine txt Datei Speichern dies erreiche ich mit den folgenden Code

Code: Alles auswählen


        Zeitpunkt.append(time.strftime("%Y%m%dT%H%M%S"))
        Wert1.append(x)
        ...

        Result = zip(Zeitpunkt, Wert1,  Wert2, Wert3, Wert4)

        dataFile = open(outFileName+ id + '.txt','w')
        #for eachitem in Resulttitle:
        #    dataFile.write(str(eachitem)+'\n')
        for eachitem in Result:
            dataFile.write(str(eachitem)+'\n')
        dataFile.close()

Allerdings habe ich nun das Problem, das jede Zeile in der txt mit einer Klammer ( beginnt und mit ) endet.
und der zeitpunkt zusätzlich noch mit ' Anführungszeichen geschrieben ist.
z.B.

('20150226T074750', 40147357696)
('20150226T074752', 40338903040)
...
Wie kann ich die Zeichen (,),' aus der txt entfernen bzw. bei der Entstehung bereits verhindern
Wäre über Tips dankbar

Viele Grüße

Sbfly

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Donnerstag 26. Februar 2015, 09:24
von Sirius3
@sbfly: die String-Repräsentation von Objekten wie Listen und Tuple sind nicht für die Weiterverwendung gedacht, sondern nur für Debug-Ausgaben. Wahrscheinlich möchtest Du eine csv-Datei schreiben, dafür gibt es das csv-Modul.
Statt die Werte in 5 verschiedenen Listen zu sammeln, solltest Du gleich von Anfang an nur eine Liste mit 5-Tuple-Einträgen erzeugen, statt sie zum Schluß über zip wieder zusammenzuführen.

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Donnerstag 26. Februar 2015, 09:28
von Hyperion
Du könntest das ``csv``-Modul nutzen, um eine CSV Datei zu erzeugen.

Edit: Und schon wieder zweiter... :mrgreen:

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Donnerstag 26. Februar 2015, 09:29
von sbfly
vielen Dank werde ich gleich mal versuchen

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 07:19
von sbfly
Hallo

ich habe mit das CSV modul mal etwas angeschaut https://docs.python.org/2/library/csv.html und auch versucht umzusetzen
Leider funktioniert es nicht so ganz.

Code: Alles auswählen

with open('test1.csv', 'a') as csvfile:
            fieldnames = ['Zeit', 'Wert1', 'Wert2']
            writer = csv.DictWriter(csvfile,fieldnames=fieldnames)
            writer.writeheader()
            writer.writerow({'Zeit':time.strftime("%Y%m%dT%H%M%S"), 'Wert1' : Wert1, Wert2 : Wert2})
Als Fehlermeldung erhalte ich folgendes
AttributeError: DictWriter instance has no attribute 'writeheader'

Hat jemand einen kurzen Tip woran das liegen könnte?

Vielen Dank

Florian

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 08:38
von Sirius3
@sbfly: welche Pythonversion verwendest Du? writeheader gibt es 'erst' ab Python 2.7/3.2. In Deinem Fall würde ich aber wohl gar keine Dictionaries benutzen sondern nur Listen und den normalen writer.

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 09:34
von sbfly
Ich verwende python 2.7

habe nun irgendwas geändert und es geht weiss nur nicht was :-)

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 09:54
von sbfly
nochals nee kleine Frage

ich benutze

Code: Alles auswählen

CPU=psutil.cpu_percent( interval=1, percpu=True)
um mir die Auslastung der einzelnen CPU cores mit auszugeben
nun würde ich gern diese Werte auch in die CSV Datei Speichern da es sich dabei um eine liste handelt
wird in meiner CSV immer die CPU Werte mit "[ und ]" eingefügt.
also "[0.0, 0.0, 0.0, 0.0]"
die Klammer konnte ich mit folgendem befehl entfernen

Code: Alles auswählen

str(cpu_all).strip('[]')
Ab wie kann ich noch die Anführungszeichen ("") entfernen ?

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 09:58
von EyDu
Indem du aus der Liste erst gar keinen String machst und diese Liste direkt mit dem csv-Modul speicherst. Du solltest dich unbedingt mit Datentypen befassen.

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 10:04
von sbfly
aber die Ausgabe von dem psutil ist bereits in diesem Format

"[0.0,0.0,0.0,0.0]"

und an der psutil ausgabe kann ich glaube nichts ändern

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 10:08
von garreth
Mal abgesehen davon, dass CSV eine feine Lösung ist könnte man dieses Problem auch ohne dieses Modul lösen. Wenn du dir in deinem ursprünglichen Code vor deinen ".write" Befehl einen "print type(eachitem)" einfügst wirst du sehen, dass du in deiner Liste ein Tuple hast, durch das du entweder nochmals iterieren musst oder per Index auf die Elemente zugreifst(wenn dir die Datenstruktur bekannt ist).

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 10:09
von EyDu
Lass dir mal den Typ des Rückgabewerts von psutil.cpu_percent ausgeben.

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Freitag 27. Februar 2015, 10:10
von BlackJack
@sbfly: `psutil` liefert nichts mit Klammern oder Anführungszeichen zurück bei dem Aufruf, sondern eine Liste mit Gleitkommazahlen. Eine Zeichenkette mit Klammern bekommst Du erst wenn *Du* diese Liste in eine Zeichenkettendarstellung umwandelst. Und die Anführungszeichen erst wenn Du diese Zeichenkettendarstellung *noch mal* in eine Zeichenkettendarstellung einer Zeichenkette umwandelst. Lass das einfach bleiben und schon sind da weder Klammern noch Anführungszeichen.

Edit: Die Anführungszeichen könnten auch beim Speichern in CSV vom `csv`-Modul eingefügt werden wenn das Trennzeichen das Komma ist. Dann muss man ja schliesslich irgendwie unterscheiden können ob ein Komma zum Wert gehört oder als Trennzeichen zwischen Werten interpretiert werden muss.

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Mittwoch 18. März 2015, 07:10
von sbfly
Hallo ja die Klammern entstehen beim speichern in CSV

nun habe ich folgendes versucht:

Code: Alles auswählen

	cores = multiprocessing.cpu_count()
	for i in range(cores):
		fields_cpu.append('CPU_'+str(i+1))
		fields_old =['Zeit', 'Wert1', 'Wert2', 'Wert3']
		field_complete= fields_old+fields_cpu
		fields_title= dict(zip(field_complete,field_complete))

        with open(args.output_path+args.NameP +'.csv', 'w') as csvfile:
               writer = csv.DictWriter(csvfile,delimiter=',',fieldnames=field_complete) 
               writer.writerow(fields_title)
und in meiner Schleife folgendes

Code: Alles auswählen

with open(args.output_path+args.NameP +'.csv', 'a') as csvfile:
            writer = csv.DictWriter(csvfile,delimiter=',',fieldnames=field_complete) 
            csv_line = [time.strftime("%Y%m%dT%H%M%S"), str(int(Wert1)), str(int(Wert2)), str(int(Wert3))] +  cpu_load
            row = dict(zip(fieldnames, csv_line))
            writer.writerow(row)

Leider funktioniert dies nicht :(
nicht einmal die erste Zeile aus dem ersten with open wird mir in der Datei ausgegeben
Hat jemand einen Tip

Re: List in txt speichern ohne klammern anführungszeichen ..

Verfasst: Mittwoch 18. März 2015, 08:15
von Sirius3
@sbfly: Du machst in Deiner for-Schleife unnötiges Zeugs. Dateinamen sollten nicht mit + zusammengestückelt werden, dafür gibt es os.path.join. Auch sollte der Dateiname nur einmal ermittelt werden und nicht bei jedem open erneut. csv-Dateien sind ja gerade dafür da, auch Zahlen speichern zu können, das Umwandeln in str und wahrscheinlich auch in int ist unnötig.
Wenn writerow ausgeführt wird, steht auch etwas in der Datei. Schaust Du auch in die richtige Datei am richtigen Ort?