2014-02-07 3 views
11

Pycharm을 사용하여 파일을 한 줄씩 읽는 간단한 코드를 테스트하려고합니다. Pycharm에서 sys.stdin을 사용하여 파일 읽기

for line in sys.stdin: 
    name, _ = line.strip().split("\t") 
    print name 

나는 같은 디렉토리에 입력 내가 원하는 파일이 있습니다

lib.txt 어떻게 입력 파일로 Pycharm 내 코드를 디버깅 할 수 있습니까?

답변

1

사용자 지정 실행 구성을 만든 다음 "스크립트 매개 변수"상자에 파일을 인수로 추가해야합니다. 단계별 가이드는 Pycharm의 online help을 참조하십시오.

그러나 사용자가 발견 한 경우에도 올바른 명령 줄 인수를 구문 분석하지 않기 때문에 문제가 작동하지 않습니다.

는 대신 argparse를 사용해야합니다 : 당신이 표준 입력을 직접 읽는 것보다 오히려 fileinput 함수 모듈을 사용하는 경우

import argparse 

parser = argparse.ArgumentParser() 
parser.add_argument("filename", help="The filename to be processed") 
args = parser.parse_args() 
if args.filename: 
    with open(filename) as f:  
     for line in f: 
      name, _ = line.strip().split('\t') 
      print(name) 
+0

나는 출력 창에 얻을 : 는/usr/빈/파이썬은 /home/training/PycharmProjects/pp12/main.py는 을 purch.txt하지만 아무것도 내가로드 할 때 동일한 코드가 작동 (발생하지 file with f1 = open ('purch.txt') – thecheech

+1

[명령 줄 인수를 구문 분석하는 방법] (http://docs.python.org/2/library/optparse.html)을 읽어야합니다. –

11

당신은이 문제를 해결할 수 있습니다.

fileinput을 사용하면 스크립트가 인수에서 파일 이름을 받으면 순서대로 인수에서 읽습니다. 귀하의 경우와 위의 코드를 대체 : fileinput 함수에 대한

import fileinput 
for line in fileinput.input(): 
    name, _ = line.strip().split("\t") 
    print name 

의 좋은 점은 인수가 제공되지 않은 경우 기본값은 표준 입력이다 (또는 인수가있는 경우 '-'공급).

이제 실행 구성을 만들고 stdin으로 사용할 파일의 파일 이름을 스크립트의 유일한 인수로 제공 할 수 있습니다.

더 읽기에 대해 내가 PyCharm의 표준 입력으로 읽을 파일을 사용하는 방법을 찾기 위해 노력 해왔다 fileinput here

3

. 그러나 제트 두뇌를 포함한 대부분의 사람들은 PyCharm 자체와 관련이없는 커맨드 라인의 특징은 지원할 방법이 없다고 말했습니다. * https://intellij-support.jetbrains.com/hc/en-us/community/posts/206588305-How-to-redirect-standard-input-output-inside-PyCharm-

실제로이 기능은 hdkerc 또는 acmicpc의 프로그래밍 문제를 해결하기위한 입력을 쉽게하기 위해 stdin으로 파일을 읽는 것이 필수적입니다.

나는 간단한 방법을 발견했다. input()을 사용하여 파일에서 stdin을 얻을 수도 있습니다!

import sys 
sys.stdin = open('input.in', 'r') 
sys.stdout = open('output.out', 'w') 

print(input()) 
print(input()) 

예를 input.in :

예를 output.out
hello world 
This is not the world ever I have known 

:

hello world 
This is not the world ever I have known 
0

유연성을 위해, 당신은 파이썬 스크립트를 작성할 수 있습니다 항상 표준 입력에서 읽은 다음 명령 리디렉션을 사용하는 파일에서 읽는 방법 :

$ python myscript.py < file.txt 

그러나 필자가 알 수있는 한, PyCharm에서 리디렉션을 사용할 수 없으므로 실행 구성에서 허용하지 않습니다.

또는, 명령 줄 인수로 파일 이름을 받아 들일 수 :

$ python myscript.py file.txt 

이 처리하는 방법은 여러 가지가 있습니다. 나는이 상황에 대해 argparse이 과도하다고 생각한다. 다른 방법으로, sys.argv 직접 명령 줄 인수에 액세스 할 수 있습니다

import sys 

filename = sys.argv[1] 
with open(filename) as f:  
    for line in f: 
     name, _ = line.strip().split('\t') 
     print(name) 

을 강력한 코드의 경우, 올바른 수의 인수가 제공되는 것을 확인할 수 있습니다. 내 코드를 실행하면