Drucken von Listenelementen in getrennten Zeilen in Python


84

Ich versuche, Python-Pfadordner folgendermaßen auszudrucken:

import sys
print sys.path

Die Ausgabe ist wie folgt:

>>> print sys.path
['.', '/usr/bin', '/home/student/Desktop', '/home/student/my_modules', '/usr/lib/pyth
on2.6', '/usr/lib/python2.6/plat-linux2', '/usr/lib/python2.6/lib-tk', '/usr/lib/pyth
on2.6/lib-old', '/usr/lib/python2.6/lib-dynload', '/usr/local/lib/python2.6/dist-pack
ages', '/usr/lib/python2.6/dist-packages', '/usr/lib/python2.6/dist-packages/PIL', '/
usr/lib/python2.6/dist-packages/gst-0.10', '/usr/lib/pymodules/python2.6', '/usr/lib/
python2.6/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.6/gtk-2.0', '/usr/lib/p
ython2.6/dist-packages/wx-2.8-gtk2-unicode']

Wie drucke ich sie in separate Zeilen, damit ich sie richtig analysieren kann?

Es sollte so sein:

/usr/bin
/home/student/Desktop
/home/student/my_modules
etc

1
Warum müssen Sie sie analysieren? Sind sie nicht schon eine Liste?
SingleNegationElimination

Antworten:


170
print("\n".join(sys.path))

(Die äußeren Klammern sind aus Gründen der Python 3-Kompatibilität enthalten und werden in Python 2 normalerweise weggelassen.)


1
Ich weiß, es spielt keine Rolle für diese Liste, aber nur das Drucken in einer for-Schleife verbraucht weniger Speicher und ist etwas einfacher.
utdemir

Wie würden Sie es in einer for-Schleife machen?
Larry

2
@ Larry:for line in sys.path: print line
Katriel

4
py3: f = lambda *x: null; f( *( print( x ) for x in sys.path ) )- nur ein Scherz ...
Flow

56

Verwenden Sie die Druckfunktion (Python 3.x) oder importieren Sie sie (Python 2.6+):

from __future__ import print_function

print(*sys.path, sep='\n')

6
Diese Antwort ist am besten geeignet, wenn Sie eine Liste mit Nicht-String-Elementen drucken.
BallpointBen

17

Eine weitere gute Option für diese Art von Option ist das pprintModul, das (unter anderem) lange Listen mit einem Element pro Zeile hübsch druckt:

>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
 '/usr/lib/python27.zip',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-linux2',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/usr/lib/python2.7/site-packages',
 '/usr/lib/python2.7/site-packages/PIL',
 '/usr/lib/python2.7/site-packages/gst-0.10',
 '/usr/lib/python2.7/site-packages/gtk-2.0',
 '/usr/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info',
 '/usr/lib/python2.7/site-packages/webkit-1.0']
>>> 

4
Wenn a = [1,3,5], dann druckt diese Zeile dieses Array nur in einer Zeile. Gibt es eine garantierte Möglichkeit pprint, es in separaten Zeilen zu drucken?
Unpolarität

1
@ 太極 者 無極 而 生pprint.pprint(x,width=max([len(str(s)) for s in x])+3)
ttb


8

Sven Marnach's Antwort ist so ziemlich alles, hat aber ein allgemeines Problem ... Es wird fehlschlagen, wenn die gedruckte Liste nicht nur Zeichenfolgen enthält.

Also, die allgemeinere Antwort auf "Wie man eine Liste mit durch Zeilenumbrüche getrennten Elementen druckt" ...

print '\n'.join([ str(myelement) for myelement in mylist ])

Andererseits ist der Druckfunktionsansatz, auf den JBernardo hinweist, überlegen. Wenn Sie können, ist es fast immer eine gute Idee, die Druckfunktion anstelle der Druckanweisung zu verwenden.


1
Sie sollten das Listenverständnis vermeiden, wenn ein Generatorausdruck verwendet werden kann, und Sie können hier definitiv einen verwenden. Schauen Sie sich diese Antwort an . Sie werden weitere nützliche Links in dieser Antwort erhalten, wie diese
Sнаđошƒаӽ

1
@ Sнаđошƒаӽ in diesem Fall nicht wahr, siehe stackoverflow.com/a/37782238/5320906
snakecharmerb

@ Snakecharmerb es ist gut zu wissen. Vielen Dank für das Teilen!
Sнаđошƒаӽ

1

Verwenden Sie den Splat-Operator (*).

Standardmäßig druckt der Operator * eine durch Leerzeichen getrennte Liste. Verwenden Sie den sepOperator, um das Trennzeichen anzugeben

print(*sys.path, sep = "\n")

1
Dies ist der neue und clevere Weg, dies zu tun! Viel besser als die verwirrenden und ausführlichen Lambdas oder Map / Joins . Das "Splat" wird hier besser erklärt .
not2qubit

0

sys.path gibt die Liste der Pfade zurück

ref

sys.path

Eine Liste von Zeichenfolgen, die den Suchpfad für Module angibt. Initialisiert aus der Umgebungsvariablen PYTHONPATH sowie einem installationsabhängigen Standard.

Wie beim Programmstart initialisiert, ist das erste Element dieser Liste, Pfad [0], das Verzeichnis, das das Skript enthält, mit dem der Python-Interpreter aufgerufen wurde. Wenn das Skriptverzeichnis nicht verfügbar ist (z. B. wenn der Interpreter interaktiv aufgerufen wird oder wenn das Skript aus der Standardeingabe gelesen wird), ist Pfad [0] die leere Zeichenfolge, die Python anweist, zuerst Module im aktuellen Verzeichnis zu suchen. Beachten Sie, dass das Skriptverzeichnis vor den Einträgen eingefügt wird, die als Ergebnis von PYTHONPATH eingefügt wurden .

import sys
dirs=sys.path
for path in dirs:
   print(path)

oder Sie können nur den ersten Pfad von drucken

print(dir[0])

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.