Ich habe Zeichenfolgen als Tupel, aus denen ich Anführungszeichen entfernen möchte. Wenn die Zeichenfolge kein Komma enthält, funktioniert dies. Wenn jedoch ein Komma steht, bleiben Anführungszeichen:

example = [('7-30-17','0x34','"Upload Complete"'),('7-31-17','0x35','"RCM","Interlock error"')]

example = [(x,y,(z.strip('"'))) 
    for x,y,z in example] 

Das Ergebnis ist, dass Anführungszeichen teilweise in den Zeichenfolgen verbleiben, in denen Kommas enthalten sind. Das zweite Tupel lautet jetzt RCM","Interlock error im Gegensatz zu RCM, Interlock error

('7-30-17','0x34','Upload Complete')
('7-31-17','0x35','RCM","Interlock error')

Irgendwelche Ideen, was ich falsch mache? Vielen Dank!

3
natnay 19 Apr. 2018 im 20:30

3 Antworten

Beste Antwort

Anscheinend suchen Sie nach dem Verhalten von replace() statt strip().

Versuchen Sie, replace('"', '') anstelle von strip('"') zu verwenden. strip entfernt nur Zeichen vom Anfang und Ende von Zeichenfolgen, während replace sich um alle Vorkommen kümmert.

Ihr Beispiel würde so aktualisiert:

example = [('7-30-17','0x34','"Upload Complete"'),('7-31-17','0x35','"RCM","Interlock error"')]

example = [(x,y,(z.replace('"', '')))
    for x,y,z in example]

example erhält den folgenden Wert:

[('7-30-17', '0x34', 'Upload Complete'), ('7-31-17', '0x35', 'RCM,Interlock error')]
2
WhiteHotLoveTiger 19 Apr. 2018 im 17:44

Das Problem ist, dass strip nur von den Enden der Zeichenfolge entfernt wird.

Verwenden Sie ein regex, um " zu ersetzen:

import re

example = [('7-30-17','0x34','"Upload Complete"'),('7-31-17','0x35','"RCM","Interlock error"')]

example = [(x,y,(re.sub('"','',z))) 
    for x,y,z in example] 

print(example)
# [('7-30-17', '0x34', 'Upload Complete'), ('7-31-17', '0x35', 'RCM,Interlock error')]
1
Austin 19 Apr. 2018 im 17:35

Sie können das Listenverständnis verwenden, um die Listenelemente zu wiederholen, und ähnlich für die inneren Tupelelemente

>>> [tuple(s.replace('"','') for s in tup) for tup in example]
[('7-30-17', '0x34', 'Upload Complete'), ('7-31-17', '0x35', 'RCM,Interlock error')]
3
Haifeng Zhang 19 Apr. 2018 im 17:34