2012-03-24 2 views
2

모두가 이런 짓이야 - 쉘에서, 당신이 (당신을 더 제공 -l 단지 LS 이상)을 텍스트 파일에 대한 몇 가지 정보가 필요한, 특히, 해당 파일의 라인 카운트, 그래서 :파일을 스니핑하기 위해 unix 'wc'에 내장 된 파이썬 아날로그가 있습니까?

@ > wc -l iris.txt 
149 iris.txt 

파이썬에서 셸 유틸리티에 액세스 할 수 있다는 것을 알고 있지만 파이썬이 내장되어 있으면이를 찾고 있습니다.

내 질문의 요점은 파일을 열지 않고이 정보 을 받고있다 (따라서 유닉스 유틸리티 * 화장실 내 참조 - * L)이 대한 올바른 용어를 '스니핑'

(이다 - 그것을 열어 보니 파일을 보셨습니까? ')

+4

wc는 파일을 엽니 다. 열지 않고 얻을 수있는 파일의 내용에 대한 유일한 정보는 길이입니다. –

+0

좋은 질문입니다. 아마 중복의 : http://stackoverflow.com/questions/845058/how-to-get-line-count-cheaply-in-python 나는 그것을 닫으려면 투표하지 않을 것이다. 누군가가 더 참신한 접근법. – bernie

+1

@ 케빈 리드 : 완전히 파일 시스템에 따라 다릅니다. 종종 크기, 파일 이름, 사용 권한, 날짜 편집/생성 등을 얻을 수 있습니다. – orlp

답변

5

언제든지 빠르게 스캔 할 수 있습니다.

lc = sum(1 for l in open('iris.txt')) 
+0

오, 죄송합니다. _'w/o opening it'_ part가 누락되었습니다. –

+2

'[]'이 필요 없습니다. 그리고 그것을 열지 않고도 할 수있는 방법이 없습니다. 이것은 좋은 해결책입니다. – agf

+0

이것은 멋진 찾고 솔루션이지만 대괄호 없이는 더 좋을 것입니다. 생성자 표현식은 목록 이해보다 메모리에 친숙합니다. –

2

아니요, 저는 이것을 "스니핑"이라고 부르지 않을 것입니다. 스니핑은 일반적으로 이더넷 패킷 캡처와 같이 통과하는 데이터를 관찰하는 것을 의미합니다.

파일을 열지 않고도 파일의 행 수를 얻을 수는 없습니다. 파일의 줄 수는 실제로 파일의 줄 바꿈 문자 수 (Linux의 경우 \ n)이므로 open() 이후에 읽어야합니다.

+0

이더넷 패킷 스니핑에 대해서는 마찬가지입니다. 스니핑은 파일 -IO 컨텍스트 (적어도 WRT Python의'csv' 모듈)에서도 사용되는 것으로 보입니다 : http://docs.python.org/library/csv.html#csv.Sniffer – bernie

관련 문제