2017-09-15 18 views
3

Ich habe eine Eingabezeichenfolge als:entfernen Apostroph aus der Liste in Python

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400","","1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 

data = result.split("\n") 

i = 0 
while i < len(data): 
    i = i +1 
    dd = data[i].split(',') 
    print dd 
    break 

und die entsprechende Ausgabe wie:

[ 
    '"testing"', 
    '"0.8841"', 
    '"642000.0"', 
    '"80.014521"', 
    '"-60.940653"', 
    '"4522126666"', 
    '"1500854400"', 
    '""', 
    '"1500842014000"', 
    '"name"', 
    '"80.014521"', 
    '"-60.996532"', 
    '"sampledevice"', 
    '"3"', 
    '"name"' 
] 

Wie ich die einfachen Anführungszeichen von jedem Element in der Liste entfernen ?

+0

Hinweis: 'während i (Daten) len <:' ist nicht der üblicher Weg, um durch eine Liste zu Schleife, 'für Daten in result.split ('/ n'): dd = data.split (',') ... 'wäre kanonischer, sieht aber wie 'csv' aus. – AChampion

+0

danke @AChampion –

Antwort

5

Behandeln Sie den Text als eine CSV:

import csv 
import StringIO 

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400","","1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 
print next(csv.reader(StringIO.StringIO(result))) 

Geben Sie:

['testing', '0.8841', '642000.0', '80.014521', '-60.940653', '4522126666', '1500854400', '', '1500842014000', 'name', '80.014521', '-60.996532', 'sampledevice', '3', 'name'] 
+0

Das Schöne daran ist, dass es Kommas innerhalb der Strings erlaubt und sie voneinander trennt. – Stael

5

müssen Sie strip anwenden, um Anführungszeichen auf beiden Seiten der Zeichenfolge zu entfernen.

dd = [x.strip('"') for x in data[i].split(',')] 

das sagte, Ihre Schleife scheint ein Indexproblem zu haben. Sollte neu geschrieben werden, zum Beispiel wie folgt aus:

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400"\n"1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 

for line in result.splitlines(): 
    dd = [x.strip('"') for x in line.split(',')] 
    print(dd) 

an dieser Stelle, dann würden Sie noch besser dran mit

dd = ast.literal_eval(line) 

auch perfekter Nutzung von csv Modul mit einer list als Eingabe (keine Notwendigkeit, übergeben sie einen Datei-Handle) (keine string passieren, wenn es, wie es einige seltsame Effekte)

import csv

for row in csv.reader(result.splitlines()): 
    print(row) 
01 ergibt

alle was:

['testing', '0.8841', '642000.0', '80.014521', '-60.940653', '4522126666', '1500854400'] 
['1500842014000', 'name', '80.014521', '-60.996532', 'sampledevice', '3', 'name'] 
4

ersetzen die doppelten Anführungszeichen vor Spaltung:

>>> result.replace('"', '').split(',') 
['testing', '0.8841', '642000.0', '80.014521', '-60.940653', '4522126666', '1500854400', '', '1500842014000', 'name', '80.014521', '-60.996532', 'sampledevice', '3', 'name'] 
+0

Downvoter interessiert sich für einen Kommentar? –

+0

NMDV, aber wenn die Zeichenfolge Zitate enthält, gibt es ein Problem. Natürlich, mit OP-Versuch, wenn die Zeichenfolge ein Komma enthält, funktioniert es auch nicht. –

+0

@ Jean-FrançoisFabre Wahr, aber das sind doppelte Anführungszeichen, keine einfachen Anführungszeichen. Doppelte Anführungszeichen innerhalb einer Zeichenfolge in der Alltagsgrammatik sind selten, wenn sie nicht vorhanden sind. –

4

literal_eval gute Lösung für dieses Problem ist

import ast 
dd = [ast.literal_eval(i) for i in data] 
1

Erstens: Sie haben keine einfache Anführungszeichen in Ausgabe-String. Was Sie haben, ist eine Zeichenkette, die mit doppelten Anführungszeichen (möglicherweise zum Speichern in csv Datei) zitiert wird. Einfache Anführungszeichen Sie sehen in der Ausgabe tatsächlich die Zeichenfolge. Also:

'"some_string"' 

ist eigentlich

"some_string" 

Zweitens: wenn Sie möchten doppelte Anführungszeichen entfernen, können Sie tun:

for item in data.split(","): 
    print(item.strip('"')) 

Schauen Sie sich die folgenden Aussagen, sollte es mehr klar :

item = '"some_string"' 
other_item = 'some_string' 
some_other_item = "some_string" 

print(item) # --> "some_string" 
print(other_item) # --> some_string 
print(some_other_item) # --> some_string 

print(item, other_item, some_other_item) # --> ('"some_string"', 'some_string', 'some_string') 
+0

ja @Fejs das Ergebnis genau wie CSV-Datei. Danke für den Vorschlag. es ist sehr hilfreich –

1

Während Staatsmänner Das ist seltsam. Möchte er keine einfachen Anführungszeichen löschen? Warum posten alle Antworten, die doppelte Anführungszeichen löschen.

Hier ist mein Vorschlag:

result = '"testing","0.8841","642000.0","80.014521","-60.940653","4522126666","1500854400","","1500842014000","name","80.014521","-60.996532","sampledevice","3","name"' 

data = result.split("\n") 

s = str(data)[2:-2] #Convert to a string, and delete [' and '] 
for dd in s.split(','): 
    print dd 

Das Ergebnis:

"testing" 
"0.8841" 
"642000.0" 
"80.014521" 
"-60.940653" 
"4522126666" 
"1500854400" 
"" 
"1500842014000" 
"name" 
"80.014521" 
"-60.996532" 
"sampledevice" 
"3" 
"name" 
+0

hast du die Frage gelesen? –

+0

@ Jean-FrançoisFabre tatsächlich hat Alperen einen Punkt - aufgrund der Art und Weise, wie das OP das Problem beschrieben hat ... – coder

+0

@coder, wenn Sie es sagen. Zu müde, um es zu verstehen. Ich habe gerade bearbeitet "kann nicht kommentieren", weil es eine tatsächliche Antwort ist. –

Verwandte Themen