Python에서 구분 된 줄에 목록 요소 인쇄


84

이것을 사용하여 Python 경로 폴더를 인쇄하려고합니다.

import sys
print sys.path

출력은 다음과 같습니다.

>>> 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']

올바르게 구문 분석 할 수 있도록 개별 줄로 인쇄하려면 어떻게해야합니까?

다음과 같아야합니다.

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

1
왜 그들을 파싱해야합니까? 그들은 이미 목록이 아닌가?
SingleNegationElimination

답변:


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

(외부 괄호는 Python 3 호환성을 위해 포함되며 일반적으로 Python 2에서는 생략됩니다.)


1
나는 그 크기의 목록에 대해서는 중요하지 않지만 for 루프 내부에서 인쇄하는 것은 메모리를 덜 소비하고 이것보다 약간 더 간단합니다.
utdemir 2013 년

for 루프에서 어떻게할까요?
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 ) )-농담입니다 ...
flow

57

인쇄 기능 (Python 3.x)을 사용하거나 가져 오거나 (Python 2.6 이상) :

from __future__ import print_function

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

6
이 대답은 문자열이 아닌 요소를 포함하는 목록을 인쇄 할 때 가장 좋습니다.
BallpointBen

17

이러한 종류의 옵션을 처리하는 또 다른 좋은 옵션은 pprint모듈로, 다른 것들 중에서도 한 줄에 하나의 요소로 긴 목록을 인쇄합니다.

>>> 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
이면 a = [1,3,5]해당 줄은이 배열을 한 줄로만 인쇄합니다 ... pprint별도의 줄에 인쇄 할 수 있는 확실한 방법이 있습니까?
nonopolarity

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


8

Sven Marnach의 대답은 거의 비슷하지만 일반성 문제가 하나 있습니다. 인쇄되는 목록에 문자열 만 포함되어 있지 않으면 실패합니다.

따라서 "개행으로 구분 된 요소로 목록을 인쇄하는 방법"에 대한보다 일반적인 대답은 ...

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

그런 다음 JBernardo가 지적한 인쇄 기능 접근 방식이 우수합니다. 가능하다면 print 문 대신 print 함수를 사용하는 것이 거의 항상 좋은 생각입니다.


1
생성기 표현식을 사용할 수있는 경우 목록 이해를 사용하지 않아야하며 여기에서 확실히 사용할 수 있습니다. 이 답변을 살펴보십시오 . 당신처럼, 그 대답에 더 유용한 링크를 얻을 것이다 이 한
Sнаđошƒаӽ

1
@ Sнаđошƒаӽ이 경우에는 사실이 아닙니다. stackoverflow.com/a/37782238/5320906
snakecharmerb

@snakecharmerb 아는 것이 좋습니다. 공유해 주셔서 감사합니다!
Sнаđошƒаӽ

1

표시 연산자 (*) 사용

기본적으로 * 연산자는 공백으로 구분 된 목록을 인쇄합니다. 사용 sep구분 기호를 지정하는 연산자

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

1
이것은 새롭고 현명한 방법입니다! 혼란스럽고 장황한 람다 또는 map / joins를 사용하는 것보다 훨씬 낫습니다 . "표시"는 여기에서 더 잘 설명 됩니다 .
not2qubit

0

sys.path는 경로 목록을 반환합니다.

심판

sys.path

모듈의 검색 경로를 지정하는 문자열 목록입니다. 환경 변수 PYTHONPATH 및 설치 종속 기본값 에서 초기화됩니다 .

프로그램 시작시 초기화 된대로이 목록의 첫 번째 항목 인 path [0]은 Python 인터프리터를 호출하는 데 사용 된 스크립트를 포함하는 디렉토리입니다. 스크립트 디렉토리를 사용할 수없는 경우 (예 : 인터프리터가 대화 형으로 호출되거나 스크립트가 표준 입력에서 읽혀지는 경우) path [0]은 빈 문자열이며, 이는 Python이 먼저 현재 디렉토리에서 모듈을 검색하도록 지시합니다. PYTHONPATH 의 결과로 삽입 된 항목 앞에 스크립트 디렉토리가 삽입 됩니다.

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

또는 첫 번째 경로 만 인쇄 할 수 있습니다.

print(dir[0])

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.