2013-11-23 2 views
13

텍스트 파일을 사용하고 파일의 데이터를 조작하고 다른 파일로 출력하는 python 스크립트가 있습니다. 기본적으로 나는 그것이 어떤 텍스트 파일 입력을 위해 일하고 싶다. 지금은 파일에서 읽어서 출력을 화면에 출력합니다. 출력을 파일로 원합니다.python 스크립트 용 터미널에서 입력 파일을 가져 오는 방법은 무엇입니까?

cat input_file.txt | python script.py > output_file.txt. 

어떻게 내 스크립트에이를 구현할 수 있습니다

그래서 사용자는 모든 파일에 대해 다음과 테스트를 입력 할 수 있습니다? 고맙습니다.

cat은 linux에서 명령입니다. 나는 그것이 어떻게 작동하는지 모른다.

+1

'cat foo | 바 '는 절대로 필요하지 않습니다. 당신은 언제나'bar abarnert

답변

26

이 작업을 수행하는 가장 좋은 방법은 아마도 호출하는 것입니다 :이 같은 프로그램을 실행할 수 있습니다, 지금

import sys 
with open(sys.argv[1], 'r') as fin, open(sys.argv[2], 'w') as fout: 

:

예를 들어, 당신은이에 대한 첫 번째 라인을 변경할 수 있습니다 파이썬 스크립트의 인수로 입력 및 출력 파일 :

import sys 
inFile = sys.argv[1] 
outFile = sys.argv[2] 

그럼 당신은 모든 데이터를 읽을 수있는, 당신의 조작을 수행하고 그 결과 쓰는 : 당신이 절대적으로 파이프 (정말 권장하지 않습니다) 파이썬 데이터, sys.stdin.readlines()

를 사용해야하는 경우 당신은 python script.py input_file.txt output_file.txt

을 실행하여이 프로그램을 호출 할 수 있습니다

with open(inFile,'r') as i: 
    lines = i.readlines() 

processedLines = manipulateData(lines) 

with open(outFile,'w') as o: 
    for line in processedLines: 
     o.write(line) 

+0

배관이 왜 권장되지 않습니까? (또는'cat foo | python bar.py'와'python bar.py

3
cat input_file.txt | python script.py > output_file.txt. 

당신은 파이썬 스크립트를 구현하기 위해, 그래서 대신 실제 파일의 input_file.txt 내부의 모든 데이터가 큰 문자열을 전달 할 수 있습니다, 그냥 문자열 인수로 가져가 새로운하여 문자열을 분할 라인 문자, 예를 들어 당신이 큰 문자열을 분할하고 OUTPUTFILE에 쓸 구분자로 "\ n을"를 사용할 수 있습니다, 그냥 일반적인 방법

open file, write to the fileclose file

+1

'에서 \ n "을 구분 기호로 사용할 수 있습니다.'라는 말은 꽤 오도합니다. 모든 최신 플랫폼 _except_ Windows에서 '\ n'을 구분 기호로 사용할 수 있습니다. Windows에서 보편적 인 개행 문자로 텍스트 모드를 사용하지 않는 한'\ r \ n'을 사용해야합니다.이 경우 Python은 Windows를 다른 플랫폼처럼 취급 할 수있게합니다. – abarnert

+0

@abarnert 당신은 나를 잡았어! 업데이트 됨, thx – JoeC

0

송신 출력에 그것을 할 파일에 대한 입력은 파일에서 입력을받는 것과 매우 유사합니다.

'r' 모드 대신 'w' 모드를 사용하는 경우를 제외하고는 읽기와 동일한 방법으로 쓰기 용으로 파일을 엽니 다.

read 또는 readline을 호출하여 읽는 것과 같은 방법으로 파일에 write을 호출하여 파일에 쓸 수 있습니다.

이 내용은 모두 자습서의 Reading and Writing Files 섹션에서 설명합니다.

따라서, 기존의 코드는 다음과 같습니다 경우 :

with open('input.txt', 'r') as fin, open('output.txt', 'w') as fout: 
    while True: 
     line = fin.readline() 
     if not line: 
      break 
     fout.write(line) 

당신이를 통과하는 사용자를 허용하고자하는 경우 :

with open('input.txt', 'r') as f: 
    while True: 
     line = f.readline() 
     if not line: 
      break 
     print(line) 

당신은 단지이 작업을 수행해야 명령 줄에서 파일 이름을 사용하려면 sys.argv을 사용하여 파일 이름을 얻거나보다 복잡한 명령 줄 인수 구문 분석에 argparse을 사용하십시오.

python script.py input_file.txt outputfile.txt 
+0

쿨, 고맙습니다. –

1

이 방법 (질문)은 STDIN에서 읽은 데이터를 설명 :

cat input_file.txt | python script.py

솔루션 : script.py : 위의 솔루션

import sys 
for line in sys.stdin: 
    print line 

방법은 파이썬 호출 인수 매개 변수를 가지고 설명 :

python script.py input_file.txt

솔루션 : script.py :

import sys 
with open(sys.argv[1], 'r') as file: 
    for line in file: 
     print line 

희망이 도움이됩니다.

관련 문제