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' จะแสดงการเปลี่ยนแปลงที่ทำเสร็จแล้ว