2011-03-11 1 views
3

반복되는 질문 인 경우 죄송합니다. 데이터를 라인 스트림으로 처리하기 위해 파이썬 스크립트를 작성하려면 어떻게해야합니까? 내가 처리하고있는 파일이 크기 때문에이 작업을 수행해야하며 파일을 메모리로 읽지 않을 것입니다.어떻게 파이썬에서 텍스트 스트림을 처리 할 프로그램을 작성 하시겠습니까?

한 번에 한 줄의 파일을 읽을 수는 있지만 텍스트 스트림을 처리 할 수있는 내용이 필요하다는 것을 알고 있습니다.

+2

"줄의 흐름"읽기와 "한 번에 한 줄의 파일 읽기"의 차이점은 무엇입니까? –

+0

글쎄, 입력 스트림에서, 나는 어디서 온 줄 신경 쓰지 않아. 나는 입력에 대한 파일 처리를하고 있지 않다. 내가 한 번에 한 줄씩 읽게되면 파일을 알게되고, 내 프로그램은 파일을 열고 닫아야합니다. – Sam

답변

14

answer에서 설명한대로 stdin에서 데이터를 읽을 수 있습니다.

cat file.txt | python script.py 

당신이 할 수있는 코스 파이프 출력 : 파일을 처리 할 경우, 단지 (유닉스 플랫폼에서)이 같은 스크립트를 호출

for line in sys.stdin: 
    # do suff 

:이 코드처럼 보일 것이다 거기에있는 다른 프로그램도.

0
f = open('somefile.txt') 
for line in f: 
    process(line) 

사실, f는 반복 가능한 아무것도를 할 수 있습니다 문자열의 예를 들어 목록 그래서 심지어 sys.stdin 당신은 표준 입력에서 읽고 싶어합니다.

+1

완성을 위해 f.close()를 추가하거나 _with_ 블록을 사용해야합니다 .. – extraneon

+0

맞습니다. 그러나 그것이 프로그램이 수행하고있는 모든 작업 (행을 읽고'process()'를 호출하면) 파일을 명시 적으로 닫을 필요가 없습니다. –

+1

이 질문과 같은 질문을하는 사람들은 대개 초보자이므로 신중해야합니다. 그들이 더 잘 알지 못하기 때문에 최선의 관행만을 보여줍니다. –

7

귀하의 사례는 정확히 the fileinput module을 위해 설계된 것 같습니다. 그런 식으로 당신이 할 수 있습니다 :

python script.py file1.txt file2.txt file3.txt file4.txt 

과에서를 script.py fileinput 함수를 사용하기위한 추가 보너스 당신이 Space_C0wb0y가 첫 번째 매개 변수로 대시를 추가 제안 거의 같은 일을 할 수 있다는 것입니다

import fileinput 
for line in fileinput.input(): 
    # do stuff here 

:

python script.py - < file.txt 

또는

cat file.txt | python script.py - 

fileinput이 Space_C0wb0y와 연결된 질문에 대한 답변에 언급되어 있는데, 나는 그것이 어떻게 활용 될 수 있는지 철자가 있다고 생각했습니다.