Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 여러 입력 스트림에서 줄을 반복합니다.

<시간/>

Python의 내장 open() 함수는 읽기/쓰기 모드에서 하나의 파일을 열고 해당 파일에 대한 읽기/쓰기 작업을 수행합니다. 여러 파일을 일괄 처리하려면 fileinput을 사용해야 합니다. 파이썬 표준 라이브러리의 모듈. 이 모듈은 파일 반복 기능이 있는 Fileinput 클래스를 제공합니다. 이 모듈은 같은 목적으로 도우미 함수도 정의합니다.

이 모듈의 기본 인터페이스는 input()입니다. 기능. 이 함수는 Fileinput 클래스의 인스턴스를 반환합니다.

fileinput.input(파일, 인플레이스, 모드)

files 매개변수는 하나씩 읽을 하나 이상의 파일 이름입니다. 각 파일은 생성기 역할을 하며 반복될 수 있는 for 루프를 사용합니다. 파일의 각 행은 Python 콘솔에 인쇄됩니다.

>>> for line in fileinput.input('data.txt'):print(줄)

files 매개변수는 많은 파일로 구성된 튜플일 수 있습니다. 파일의 내용이 하나씩 표시됩니다.

>>> for line in fileinput.input(files=('a.txt', 'b.txt')):print(줄)

Fileinput 클래스는 with 문에서 컨텍스트 관리자를 사용할 수도 있습니다.

>>> with fileinput.input(files=('a.txt', 'b.txt')) as f:for line in f:print (line)

fileinput 모듈에는 다음과 같은 기능이 정의되어 있습니다.

시니어 번호 기능 및 설명
1 파일 이름()
현재 읽고 있는 파일의 이름을 반환합니다.
2 파일 번호()
파일 설명자 정수를 반환합니다.
3 lineno()
읽고 있는 파일의 줄 번호를 반환합니다. 숫자는 누적 카운트입니다.
4 filelineno()
현재 파일의 줄 번호만 반환합니다.
5 isfirstline()
현재 파일의 첫 번째 줄을 읽고 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

다음 문은 줄 번호와 함께 파일의 각 줄을 인쇄합니다.

>>> for line in fileinput.input('books.py'):print ('{}->{}'.format(fileinput.filelineno(), line))

위 코드의 샘플 출력은

1->import sqlite32->conn =sqlite3.connect('c:/python36/books.db')3->cursor =conn.cursor()4->cursor.execute("책에서 * 선택; ")5->인쇄(cursor.fetchall())

다음 코드는 폴더의 각 파일 이름과 그 안에 번호가 매겨진 행을 인쇄합니다. 이 프로그램에서는 선택적으로 일치하는 와일드 카드와 함께 현재 경로의 파일 목록을 반환하는 glob() 함수가 사용됩니다. 여기서 glob('*.py')는 현재 폴더에서 확장자가 .py인 모든 파일의 목록을 반환합니다. 이 목록은 fileinput.input() 함수에 대한 파일 매개변수로 사용됩니다.

fileinput.input(glob.glob("*.py")):if fileinput.isfirstline():print (fileinput.filename(),'>')sys.stdout에서 fileinput, glob, sysfor 라인을 가져옵니다. 쓰기("{}.{}".format(fileinput.filelineno(),line))

isfirstline() 함수의 사용에 유의하십시오. 새 파일의 반복이 시작되면 이 함수는 true를 반환하고 fileinput.filename() 함수에서 반환한 파일 이름을 먼저 인쇄한 다음 숫자가 있는 행을 표시합니다. 예를 들어

1.py>1.a =102.b =203.print ('addition=',a+b)hello.py>1.x =102.y =203.z =x+y4.print( "x+y=",z)

인플레이스 매개변수

기본적으로 fileinput.input() 함수의 경우 inplace =False입니다. True로 설정하면 입력 파일을 쓰기 가능하게 만듭니다.

다음과 같은 내용의 'msg.txt'가 있다고 가정합니다.

안녕하세요 파이썬. 좋은 아침입니다

다음 코드는 fileinput 모듈을 사용하여 파일을 열고 내용을 수정합니다.

>>> for line in fileinput.input(files='msg.txt',inplace =True):line =line.replace('morning', 'evening')sys.stdout.write(line) 

'msg.txt'에 변경 사항이 표시됩니다.