Computer >> Máy Tính >  >> Lập trình >> Python

Lặp lại các dòng từ nhiều luồng đầu vào bằng Python

open () được tích hợp sẵn trong Python chức năng mở một tệp ở chế độ đọc / ghi và đọc / ghi các hoạt động trên đó. Để thực hiện xử lý nhiều tệp trong một lô, người ta phải sử dụng fileinput mô-đun của thư viện tiêu chuẩn của Python. Mô-đun này cung cấp một lớp Fileinput với chức năng lặp qua các tệp. Mô-đun cũng xác định các chức năng trợ giúp cho cùng mục đích.

Giao diện chính của mô-đun này là input () hàm số. Hàm này trả về phiên bản của lớp Fileinput.

 fileinput.input (tệp, vị trí, chế độ) 

Tham số tệp là tên của một hoặc nhiều tệp được đọc từng tệp một. Mỗi tệp hoạt động như một trình tạo và sử dụng vòng lặp for, nó có thể được lặp lại. Mỗi dòng trong tệp sẽ được in trên bảng điều khiển Python.

>>> cho dòng trong fileinput.input ('data.txt'):print (line) 

Tham số tệp có thể là một bộ bao gồm nhiều tệp. Nội dung của các tệp sẽ được hiển thị từng tệp một.

>>> cho dòng trong fileinput.input (files =('a.txt', 'b.txt')):print (line) 

Lớp Fileinput cũng có thể được sử dụng một trình quản lý ngữ cảnh trong câu lệnh with.

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

Mô-đun đầu ra tệp có các chức năng sau được định nghĩa trong đó.

Sr.No. Chức năng &Mô tả
1 tên tệp ()
Trả về tên của tệp hiện đang được đọc.
2 fileno ()
trả về số nguyên bộ mô tả tệp.
3 lineno ()
trả về số dòng của tệp đang được đọc. Số lượng là số lượng tích lũy.
4 filelineno ()
chỉ trả về số dòng của tệp hiện tại.
5 isfirstline ()
trả về true nếu dòng đầu tiên của tệp hiện tại đang được đọc, ngược lại là false

Câu lệnh sau in từng dòng trong tệp cùng với số dòng

>>> cho dòng trong fileinput.input ('books.py'):print ('{} -> {}'. format (fileinput.filelineno (), line)) 

Đầu ra mẫu của mã trên là

 1-> import sqlite32-> conn =sqlite3.connect ('c:/python36/books.db') 3-> cursor =conn.cursor () 4-> cursor.execute ("CHỌN * từ sách; ") 5-> in (cursor.fetchall ()) 

Mã sau in từng tên tệp trong thư mục theo sau là các dòng được đánh số trong đó. Trong chương trình này, hàm perf () được sử dụng để trả về danh sách các tệp trong đường dẫn hiện tại tùy chọn với các thẻ đại diện phù hợp. Tại đây perf (‘*. Py’) sẽ trả về danh sách tất cả các tệp có phần mở rộng .py trong thư mục hiện tại. Danh sách này được sử dụng làm tham số tệp cho hàm fileinput.input ().

 nhập dòng fileinput, global, sysfor trong fileinput.input (global.glob ("*. py")):if fileinput.isfirstline ():print (fileinput.filename (), '>') sys.stdout. write ("{}. {}". format (fileinput.filelineno (), line)) 

Lưu ý việc sử dụng hàm isfirstline (). Khi bắt đầu lặp lại tệp mới, hàm này trả về true và tên tệp được trả về bởi hàm fileinput.filename () được in đầu tiên và sau đó các dòng có số được hiển thị. Ví dụ

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

tham số inplace

Theo mặc định, inplace =False cho hàm fileinput.input (). Nếu nó được đặt thành True, nó sẽ làm cho tệp đầu vào có thể ghi được.

Giả sử rằng có một "msg.txt" với văn bản sau trong đó.

 Xin chào Python. Chào buổi sáng 

Mã sau sẽ mở tệp bằng mô-đun fileinput và sửa đổi nội dung của nó tại chỗ.

>>> cho dòng trong fileinput.input (files ='msg.txt', inplace =True):line =line.replace ('morning', 'tối') sys.stdout.write (line)  

‘Msg.txt’ sẽ hiển thị các thay đổi đã thực hiện.