Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

วนซ้ำหลายบรรทัดจากอินพุตสตรีมหลายรายการใน Python


open() . ในตัวของ Python ฟังก์ชันเปิดไฟล์หนึ่งไฟล์ในโหมดอ่าน/เขียน และดำเนินการอ่าน/เขียนในไฟล์นั้น ในการประมวลผลไฟล์หลายไฟล์ในแบตช์ ต้องใช้ fileinput โมดูลของไลบรารีมาตรฐานของ Python โมดูลนี้จัดเตรียมคลาส Fileinput พร้อมฟังก์ชันการวนซ้ำบนไฟล์ โมดูลยังกำหนดฟังก์ชันตัวช่วยสำหรับวัตถุประสงค์เดียวกัน

อินเทอร์เฟซหลักของโมดูลนี้คือ input() การทำงาน. ฟังก์ชันนี้ส่งคืนอินสแตนซ์ของคลาส Fileinput

fileinput.input(ไฟล์ แทนที่ โหมด)

พารามิเตอร์ไฟล์คือชื่อของไฟล์ตั้งแต่หนึ่งไฟล์ขึ้นไปที่จะอ่านทีละไฟล์ แต่ละไฟล์ทำหน้าที่เป็นตัวสร้างและใช้ for loop ซึ่งสามารถทำซ้ำได้ แต่ละบรรทัดในไฟล์จะถูกพิมพ์บนคอนโซล Python

>>> สำหรับบรรทัดใน fileinput.input('data.txt'):print (line)

พารามิเตอร์ไฟล์สามารถเป็นทูเพิลที่ประกอบด้วยไฟล์จำนวนมาก เนื้อหาของไฟล์จะแสดงทีละรายการ

>>>> สำหรับบรรทัดใน fileinput.input(files=('a.txt', 'b.txt')):print (line)

คลาส Fileinput สามารถใช้ตัวจัดการบริบทในคำสั่ง with ได้

>>> พร้อม fileinput.input(files=('a.txt', 'b.txt')) เป็น f:for line ใน f:print (line)

โมดูลอินพุตไฟล์มีฟังก์ชันที่กำหนดไว้ดังต่อไปนี้

ซีเนียร์ ฟังก์ชัน &คำอธิบาย
1 ชื่อไฟล์()
ส่งกลับชื่อของไฟล์ที่กำลังอ่านอยู่
2 fileno()
ส่งคืนจำนวนเต็มของ file descriptor
3 lineno()
ส่งคืนหมายเลขบรรทัดของไฟล์ที่กำลังอ่าน ตัวเลขเป็นจำนวนสะสม
4 filelineno()
ส่งคืนหมายเลขบรรทัดของไฟล์ปัจจุบันเท่านั้น
5 isfirstline()
คืนค่า จริง หากบรรทัดแรกของไฟล์ปัจจุบันถูกอ่าน มิฉะนั้น จะเป็นเท็จ

คำสั่งต่อไปนี้จะพิมพ์แต่ละบรรทัดในไฟล์พร้อมกับหมายเลขบรรทัด

>>> สำหรับบรรทัดใน fileinput.input('books.py'):print ('{}->{}'.format(fileinput.filelineno(), line))

ตัวอย่างผลลัพธ์ของโค้ดด้านบนคือ

1->นำเข้า sqlite32->conn =sqlite3.connect('c:/python36/books.db')3->เคอร์เซอร์ =conn.cursor()4->cursor.execute ("เลือก * จากหนังสือ; ") 5->print(cursor.fetchall())

รหัสต่อไปนี้พิมพ์ชื่อไฟล์แต่ละไฟล์ในโฟลเดอร์ตามด้วยบรรทัดตัวเลขในนั้น ในโปรแกรมนี้ใช้ฟังก์ชัน glob() ซึ่งส่งคืนรายการไฟล์ในเส้นทางปัจจุบันโดยเลือกด้วย wild card ที่ตรงกัน ที่นี่ glob('*.py') จะส่งคืนรายการไฟล์ทั้งหมดที่มีนามสกุล .py ในโฟลเดอร์ปัจจุบัน รายการนี้ใช้เป็นพารามิเตอร์ไฟล์สำหรับฟังก์ชัน fileinput.input()

นำเข้า fileinput, glob, sysfor บรรทัดใน fileinput.input(glob.glob("*.py")):if fileinput.isfirstline():print (fileinput.filename(),'>')sys.stdout เขียน ("{}.{}".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)

พารามิเตอร์แทนที่

โดยค่าเริ่มต้น inplace =False สำหรับฟังก์ชัน fileinput.input() หากตั้งค่าเป็น True จะทำให้ไฟล์อินพุตสามารถเขียนได้

สมมติว่ามี 'msg.txt' โดยมีข้อความต่อไปนี้อยู่

สวัสดี Python อรุณสวัสดิ์

รหัสต่อไปนี้จะเปิดไฟล์โดยใช้โมดูล fileinput และแก้ไขเนื้อหาในตำแหน่ง

>>> สำหรับบรรทัดใน fileinput.input(files='msg.txt',inplace =True):line =line.replace('morning', 'evening')sys.stdout.write(line) 

'msg.txt' จะแสดงการเปลี่ยนแปลงที่ทำเสร็จแล้ว