Pythn file input 및 argparse 병존

예를 들어 Perl에 아래와 같이 쓰면 매우 편리하다.
while(<>){
    print $_;
}
어떤 편리한 말을 하려면 다음과 같은 두 가지 입력 방식을 받아들일 수 있다.
  • 표준 입력에서 읽기
  • 매개변수에 지정된 파일 읽기
  • 파이톤에서 같은 일을 fileinput으로 사용할 수 있습니다.
    #!/usr/bin/env python
    import fileinput
    
    for line in fileinput.input():
        print(line, end="")
    
    여기서, 우리는 fileinput과argparse를 간단하게 조합할 것이다.
    #!/usr/bin/env python
    
    import argparse
    import fileinput
    
    parser = argparse.ArgumentParser(prog="cata.py", description="fileinput & argparse")
    parser.add_argument('-i', '--info', action='store_true', help='Print information')
    args = parser.parse_args()
    
    for line in fileinput.input():
        print(line, end="")
    
    그래서 이런 실수 (울)
    $ ./catf_ng.py  file?.txt
    usage: cata.py [-h] [-i]
    cata.py: error: unrecognized arguments: file0.txt file1.txt file2.txt
    
    해결 방법은 다음 웹 사이트에 있음
    https://gist.github.com/martinth/ed991fb8cdcac3dfadf7
    상술한 사이트는 최종 기술 예가 없고 같은 내용이 일본어 사이트에서 성공하지 못했기 때문에 나는 이 문장에 필기를 남기고 싶다.
    #!/usr/bin/env python
    
    import argparse
    import fileinput
    
    parser = argparse.ArgumentParser(prog="cata.py", description="fileinput & argparse")
    parser.add_argument('files', metavar='FILE', nargs='*', help='files to read, if empty, stdin is used')
    parser.add_argument('-i', '--info', action='store_true', help='Print information')
    args = parser.parse_args()
    
    for line in fileinput.input(files=args.files):
        print(line, end="")
    
    마지막으로 경품으로 위의ddarguument()에 추가된 옵션("-i", "--info")에 기능이 추가되었습니다.
    #!/usr/bin/env python
    
    import argparse
    import fileinput
    
    parser = argparse.ArgumentParser(prog="cati.py", description="cat with file infomation")
    parser.add_argument('files', metavar='FILE', nargs='*', help='files to read, if empty, stdin is used')
    parser.add_argument('-i', '--info', action='store_true', help='Print filename and line no')
    args = parser.parse_args()
    
    for line in fileinput.input(files=args.files):
        if(args.info):
            if(fileinput.isfirstline()):
                print("*** {}".format(fileinput.filename()))
            print("{:6}\t".format(fileinput.filelineno()), end="")
        print(line, end="")
    
    위의 스크립트는 옵션이 없으면 캣만 만듭니다.
    예를 들어, 다음 세 개의 파일을 준비합니다.
    file0.txt
    I am Nozomi.
    Are you Nozomi.
    Yes, I am.
    
    
    file1.txt
    This is my bag.
    That is your pen.
    Is that a pen?
    Yes, it is.
    No, it is not.
    It is a pencil.
    
    
    file2.txt
    He is my friend.
    She is not from America.
    Do you study English?
    I like soccer.
    
    
    "- info"또는 "- i"를 더하면 출력은 다음과 같습니다.
    $ ./cati.py --info file?.txt
    *** file0.txt
         1  I am Nozomi.
         2  Are you Nozomi.
         3  Yes, I am.
         4  
    *** file1.txt
         1  This is my bag.
         2  That is your pen.
         3  Is that a pen?
         4  Yes, it is.
         5  No, it is not.
         6  It is a pencil.
         7  
    *** file2.txt
         1  He is my friend.
         2  She is not from America.
         3  Do you study English?
         4  I like soccer.
         5  
    

    좋은 웹페이지 즐겨찾기