2017-01-24 4 views
0

Ich versuche, eine Liste in Python, die mehrere Zeichenfolgen, von denen einige \ t und \ n Zeichen in ihnen enthalten, um eine Zeichenfolge zu erstellen.Beitritt einer Liste mit Newline-Zeichen als CL-Argument übergeben

Sagen Sie meiner Liste sieht wie folgt aus:

ll = ['list', 'of', '\tstrings', '\n\twith', 'newline', '\tcharacters'] 
ss = ':::'.join(ll) 
print ss 

druckt ss mit ihrer \ n und \ t Zeichen formatiert:

list:::of::: strings::: 

    with:::newline::: characters\ 

Während das, was ich will, ist drucken:

'list:::of:::\tstrings:::\n\twith:::newline:::\tcharacters' 

Ich habe versucht:

ss =[] 
for l in ll: 
    ss.append(repr(l)) 
ss = ':::'.join(ll) 

, die dasselbe tut wie oben

und:

ss = '' 
for l in ll: 
    ss += (repr(l)) + ':::' 

print ss.strip(':::') 

die in der Nähe ist, aber druckt:

'list':::'of':::'\tstrings':::'\n\twith':::'newline':::'\tcharacters' 

ein paar Hacks aber keine Versuchte scheinen zu bekommen ich was ich brauche.

Der Grund, ich brauche es wie oben, ist, weil ich CL-Argumente zu einem Skript schreiben, die ich später auf einem anderen Computer aufrufen. Das Übergeben einer Liste als ein CL-Argument funktioniert nicht, also würde ich die Liste als String übergeben (zusammen mit ':::') und dann auf der anderen Folie mit ':::' wieder in eine Liste aufteilen. . Dies funktioniert, wenn Sie nur join und split auf der ursprünglichen Liste verwenden, jedoch einen Fehler beim Aufruf des Python-Skripts mit den hartcodierten CL-Argumenten auslöst, da es in der Liste getwistete String-Argumente gibt. Das letzte Beispiel funktioniert, wenn an der zweiten Maschine durchlaufen, gibt mir aber diese Liste, wenn ich es aufgespalten zurück:

["'list'", "'of'", "'\\tstrings'", "'\\n\\twith'", "'newline'", "'\\tcharacters'"] 

wenn stattdessen ich brauche:

['list', 'of', '\tstrings', '\n\twith', 'newline', '\tcharacters'] 

UPDATE: Ich habe versucht, alle die Vorschläge unten und mehr und immer noch nicht herausfinden, so für jetzt bin ich nur dumping die Liste in eine Textdatei auf dem ersten Server, Übergabe der Dateiname anstelle der Liste, dann Lesen der Textdatei in eine Liste auf dem zweiten Server. Hoffentlich funktioniert diese Problemumgehung, aber ich suche immer noch nach Vorschlägen für einen besseren Weg.

Antwort

1

Die verbunden Zeichenfolge ist bereits, wie Sie es wollen. Sie können diese Darstellung durch den Druck seiner bestätigen:

ll = ['list', 'of', '\tstrings', '\n\twith', 'newline', '\tcharacters'] 
ss = ':::'.join(ll) 
print repr(ss) 
# 'list:::of:::\tstrings:::\n\twith:::newline:::\tcharacters' 
+0

Danke, das hilft jedoch, wenn ich repr (ss) als Argument übergebe und dann versuche, es auf der anderen Seite zu teilen: – user20408

+0

Sie müssen 'repr (ss)' pass 'nicht übergeben ss 'selbst –

+0

Ich versuchte, aber kann ss nicht übergeben, weil das Argument, das in das Shell-Skript geschrieben wird, das Python auf der anderen Seite aufruft, durch Zeilenumbrüche getrennt wird, die einen Fehler beim Aufruf des Skripts mit diesem arg – user20408

1

die ss in Ihrem ersten Code Gegeben:

print ss.encode("string_escape") 

(oder möglicherweise "unicode_escape" wenn es irgendein möglicherweise von Nicht-ASCII-Zeichen)

0

Wenn Sie die Tabs und Zeilenumbrüche nicht für andere Zwecke als die Übergabe als Argumente an ein anderes System verwenden möchten, sollten Sie rohe Strings (r"\n\twith") verwenden, um zu verhindern, dass alle Codes jemals als Escape-Codes interpretiert werden.

Keine Datenkonvertierungen erforderlich, die keinen Zweck erfüllen, den Sie gerade rückgängig machen möchten.

Verwandte Themen