บทช่วยสอน การป้อนข้อมูลและการส่งออก Python3 ที่ดีที่สุดในปี 2024 ในบทช่วยสอนนี้ คุณสามารถเรียนรู้ ,รูปแบบการออกสวยงาม,การจัดรูปแบบสตริงแบบเก่า,อ่านใส่แป้นพิมพ์,อ่านและเขียนไฟล์,วิธีการของวัตถุไฟล์,โมดูลดอง,
ในสองสามบทแรกที่เราได้สัมผัสจริงอินพุตหลามและฟังก์ชั่นการส่งออก ในบทนี้เราจะมาแนะนำการป้อนข้อมูลที่เฉพาะเจาะจงหลามและการส่งออก
งูหลามวิธีที่สองค่าเอาท์พุท: งบการแสดงออกและการพิมพ์ () ฟังก์ชัน
วิธีที่สามคือการใช้การเขียน () วิธีวัตถุแฟ้มแฟ้มออกมาตรฐานสามารถใช้ sys.stdout อ้างอิง
หากคุณต้องการที่จะส่งออกในรูปแบบของความหลากหลายมากขึ้นคุณสามารถใช้ str.format () ฟังก์ชั่นการจัดรูปแบบมูลค่าส่งออก
หากคุณต้องการที่จะกลายเป็นค่าสตริงของการส่งออก, คุณสามารถใช้ Repr () หรือ STR () ฟังก์ชันเพื่อให้บรรลุ
>>> s = 'Hello, w3big' >>> str(s) 'Hello, w3big' >>> repr(s) "'Hello, w3big'" >>> str(1/7) '0.14285714285714285' >>> x = 10 * 3.25 >>> y = 200 * 200 >>> s = 'x 的值为: ' + repr(x) + ', y 的值为:' + repr(y) + 'th.' >>> print(s) x 的值为: 32.5, y 的值为:40000th. >>> # repr() 函数可以转义字符串中的特殊字符 th. hello = 'hello, w3big\n' >>> hellos = repr(hello) >>> print(hellos) 'hello, w3big\n' >>> # repr() 的参数可以是 Python 的任何对象 th. repr((x, y, ('Google', 'w3big'))) "(32.5, 40000, ('Google', 'w3big'))"
มีสองวิธีในการส่งออกตารางและลูกบาศก์ตาราง:
>>> for x in range(1, 11): th. print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ') th. # 注意前一行 'end' 的使用 th. print(repr(x*x*x).rjust(4)) th. 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000 >>> for x in range(1, 11): th. print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x)) th. 1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
หมายเหตุ: ในตัวอย่างแรกช่องว่างระหว่างแต่ละคอลัมน์ถูกเพิ่มเข้ามาโดยการพิมพ์ ()
ตัวอย่างนี้แสดง rjust สตริงวัตถุ () วิธีการซึ่งอาจจะเป็นสตริงไปทางขวาและเติมช่องว่างทางด้านซ้าย
มีวิธีการที่คล้ายกันเช่น ljust () และศูนย์คือ () วิธีการเหล่านี้ไม่ได้เขียนอะไรพวกเขาก็กลับมาเป็นสตริงใหม่
อีกวิธีหนึ่ง zfill () ก็จะกรอกข้อมูลลงในหลักซ้าย 0 ดังต่อไปนี้:
>>> '12'.zfill(5) '00012' >>> '-3.14'.zfill(7) '-003.14' >>> '3.14159265359'.zfill(5) '3.14159265359'
str.format () การใช้งานพื้นฐานเป็นดังนี้:
>>> print('{}网址: "{}!"'.format('本教程', 'www.w3write.com')) 本教程网址: "www.w3write.com!"
และภายในตัวละครวงเล็บ (เรียกว่าสาขารูปแบบ) จะถูกแทนที่ด้วยพารามิเตอร์รูปแบบ () ใน
รูปแบบตำแหน่ง () ในตัวเลขในวงเล็บจะใช้ในการชี้วัตถุที่เข้ามาดังต่อไปนี้:
>>> print('{0} 和 {1}'.format('Google', 'w3big')) Google 和 w3big >>> print('{1} 和 {0}'.format('Google', 'w3big')) w3big 和 Google
หากมีข้อโต้แย้งคำหลัก () ในรูปแบบแล้วค่าของพวกเขาจะชี้ไปที่ชื่อของพารามิเตอร์
>>> print('{name}网址: {site}'.format(name='本教程', site='www.w3write.com')) 本教程网址: www.w3write.com
สถานที่และคำหลักข้อโต้แย้งที่สามารถรวมกันของใด ๆ
>>> print('站点列表 {0}, {1}, 和 {other}。'.format('Google', 'w3big', other='Taobao')) 站点列表 Google, w3big, 和 Taobao。'A' (โดยใช้ ASCII ()), (ใช้ STR ()) และ (ใช้ Repr ()) สามารถใช้ในการจัดรูปแบบค่าก่อนการเปลี่ยนแปลงของ 'R!' 's!':
>>> import math >>> print('常量 PI 的值近似为: {}。'.format(math.pi)) 常量 PI 的值近似为: 3.141592653589793。 >>> print('常量 PI 的值近似为: {!r}。'.format(math.pi)) 常量 PI 的值近似为: 3.141592653589793。
ตัวเลือก ':' ตามด้วยชื่อและรูปแบบของตัวระบุสามารถฟิลด์ นี้จะช่วยให้รูปแบบคุ้มค่ากว่า ตัวอย่างต่อไปนี้จะยังคงมีพี่สามตำแหน่งทศนิยม:
>>> import math >>> print('常量 PI 的值近似为 {0:.3f}。'.format(math.pi)) 常量 PI 的值近似为 3.142。
ใน ':' หลังจากผ่านจำนวนเต็มอย่างน้อยคุณสามารถมั่นใจได้ว่ามีความกว้างโดเมนจำนวนมากดังนั้น มีประโยชน์เมื่อใช้ในรูปแบบการจัดสวน
>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3} >>> for name, number in table.items(): th. print('{0:10} ==> {1:10d}'.format(name, number)) th. w3big ==> 2 Taobao ==> 3 Google ==> 1
หากคุณมีรูปแบบของสตริงนานและคุณไม่ต้องการที่จะแยกพวกเขาแล้วเมื่อจัดรูปแบบโดยใช้ชื่อตัวแปรมากกว่าสถานที่จะเป็นสิ่งที่ดี
ที่ง่ายที่สุดคือการผ่านในพจนานุกรมแล้วใช้วงเล็บ '[]' เพื่อเข้าถึงสำคัญ:
>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3} >>> print('w3big: {0[w3big]:d}; Google: {0[Google]:d}; ' 'Taobao: {0[Taobao]:d}'.format(table)) w3big: 2; Google: 1; Taobao: 3
นอกจากนี้คุณยังสามารถใช้ตัวแปรก่อนตาราง '**' เพื่อให้เกิดการทำงานเดียวกัน:
>>> table = {'Google': 1, 'w3big': 2, 'Taobao': 3} >>> print('w3big: {w3big:d}; Google: {Google:d}; Taobao: {Taobao:d}'.format(**table)) w3big: 2; Google: 1; Taobao: 3
ผู้ประกอบการ% สามารถทำได้การจัดรูปแบบสตริง รูปแบบสตริงอาร์กิวเมนต์ไปทางซ้ายเป็นมันคล้ายกับ sprintf () สูตรและขวาของการทดแทนแล้วสตริงที่จัดรูปแบบตัวอย่างที่ส่งกลับ:
>>> import math >>> print('常量 PI 的值近似为:%5.3f。' % math.pi) 常量 PI 的值近似为:3.142。
เพราะ str.format () ฟังก์ชั่นเป็นเรื่องค่อนข้างใหม่รหัสหลามส่วนใหญ่ยังคงใช้ผู้ประกอบการ% แต่เนื่องจากรูปแบบเก่านี้ในที่สุดจะถูกลบออกจากภาษาที่คุณควรใช้ str.format เพิ่มเติม ()
งูใหญ่ให้การป้อนข้อมูล () ฟังก์ชั่นของการป้อนข้อมูลที่มีการตั้งค่าที่จะอ่านบรรทัดของข้อความจากมาตรฐานที่เข้ามาตรฐานเริ่มต้นคือแป้นพิมพ์
การป้อนข้อมูลอาจได้รับการแสดงออกหลามเป็น input และผลตอบแทนของการดำเนินการ
#!/usr/bin/python3 str = input("请输入:"); print ("你输入的内容是: ", str)
นี้ก่อให้เกิดผลลัพธ์ต่อไปนี้สอดคล้องกับการป้อนข้อมูล:
请输入:本教程 你输入的内容是: 本教程
เปิด () ผลตอบแทนวัตถุไฟล์และไวยากรณ์พื้นฐานจะเป็นดังนี้:
open(filename, mode)
เปิดรายการสินค้าทั้งหมดในโหมดที่แตกต่างของไฟล์:
โหมด | ลักษณะ |
---|---|
R | เปิดแฟ้มในโหมดอ่านอย่างเดียว ไฟล์ตัวชี้จะถูกวางไว้ที่จุดเริ่มต้นของไฟล์ นี้เป็นโหมดเริ่มต้น |
RB | เปิดไฟล์เพียงการอ่านในรูปแบบไบนารี จะยื่นชี้ที่จุดเริ่มต้นของไฟล์ นี้เป็นโหมดเริ่มต้น |
R + | เปิดไฟล์สำหรับการอ่านและการเขียน จะยื่นชี้ที่จุดเริ่มต้นของไฟล์ |
RB + | เปิดไฟล์สำหรับการอ่านและการเขียนในรูปแบบไบนารี จะยื่นชี้ที่จุดเริ่มต้นของไฟล์ |
W | เปิดไฟล์สำหรับการเขียนเท่านั้น ถ้าไฟล์ที่มีอยู่แล้วมันจะถูกเขียนทับ ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่ |
WB | เปิดไฟล์สำหรับการเขียนในรูปแบบไบนารีเท่านั้น ถ้าไฟล์ที่มีอยู่แล้วมันจะถูกเขียนทับ ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่ |
W + | เปิดไฟล์สำหรับการอ่านและการเขียน ถ้าไฟล์ที่มีอยู่แล้วมันจะถูกเขียนทับ ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่ |
WB + | เปิดไฟล์สำหรับการอ่านและการเขียนในรูปแบบไบนารี ถ้าไฟล์ที่มีอยู่แล้วมันจะถูกเขียนทับ ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่ |
เปิดไฟล์สำหรับการผนวก ถ้าไฟล์ที่มีอยู่แล้วชี้แฟ้มจะถูกวางไว้ในตอนท้ายของแฟ้ม ในคำอื่น ๆ หลังจากที่เนื้อหาใหม่จะถูกเขียนไปยังเนื้อหาที่มีอยู่ ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่สำหรับการเขียน | |
AB | เปิดแฟ้มสำหรับการผนวกในรูปแบบไบนารี ถ้าไฟล์ที่มีอยู่แล้วชี้แฟ้มจะถูกวางไว้ในตอนท้ายของแฟ้ม ในคำอื่น ๆ หลังจากที่เนื้อหาใหม่จะถูกเขียนไปยังเนื้อหาที่มีอยู่ ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่สำหรับการเขียน |
A + | เปิดไฟล์สำหรับการอ่านและการเขียน ถ้าไฟล์ที่มีอยู่แล้วชี้แฟ้มจะถูกวางไว้ในตอนท้ายของแฟ้ม มันจะผนวกโหมดแฟ้มถูกเปิด ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่สำหรับการอ่านและการเขียน |
AB + | เปิดแฟ้มสำหรับการผนวกในรูปแบบไบนารี ถ้าไฟล์ที่มีอยู่แล้วชี้แฟ้มจะถูกวางไว้ในตอนท้ายของแฟ้ม ถ้าไฟล์ไม่อยู่สร้างไฟล์ใหม่สำหรับการอ่านและการเขียน |
ตัวอย่างต่อไปนี้จะถูกเขียนลงในไฟล์ foo.txt ในสตริง:
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "w") f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" ) # 关闭打开的文件 f.close()
เปิดไฟล์ foo.txt ปรากฏดังนี้
$ cat /tmp/foo.txt Python 是一个非常好的语言。 是的,的确非常好!!
ตัวอย่างเช่นนี้อนุมานว่าส่วนที่เหลือได้สร้างวัตถุไฟล์ที่เรียกว่า F ของ
หากต้องการอ่านเนื้อหาของแฟ้มที่เรียก f.read (ขนาด) ซึ่งจะอ่านจำนวนหนึ่งของข้อมูลและแล้วก็กลับมาเป็นสตริงหรือวัตถุไบต์
ขนาดเป็นตัวแปรที่เป็นตัวเลขที่ไม่จำเป็น เมื่อขนาดจะถูกละเว้นหรือลบเนื้อหาทั้งหมดของไฟล์จะถูกอ่านและส่งกลับ
ตัวอย่างต่อไปนี้อนุมานว่า foo.txt ไฟล์ที่มีอยู่ (ในตัวอย่างข้างต้นได้รับการสร้าง):
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.read() print(str) # 关闭打开的文件 f.close()
โปรแกรมข้างต้นผลลัพธ์คือ:
Python 是一个非常好的语言。 是的,的确非常好!!
f.readline () คุณอ่านบรรทัดเดียวจากแฟ้ม อักขระ newline '\ n' f.readline () ส่งกลับสตริงที่ว่างเปล่าถ้าอธิบายว่ามันได้รับการอ่านให้แถวสุดท้าย
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.readline() print(str) # 关闭打开的文件 f.close()
โปรแกรมข้างต้นผลลัพธ์คือ:
Python 是一个非常好的语言。
f.readlines () จะกลับแถวทั้งหมดที่มีอยู่ในแฟ้ม
ถ้าพารามิเตอร์ที่ไม่จำเป็น sizehint แล้วอ่านไบต์ยาวที่กำหนดและไบต์เหล่านี้โดยแบ่งสาย
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") str = f.readlines() print(str) # 关闭打开的文件 f.close()
โปรแกรมข้างต้นผลลัพธ์คือ:
['Python 是一个非常好的语言。\n', '是的,的确非常好!!\n']
อีกวิธีหนึ่งคือการย้ำกว่าวัตถุแฟ้มแล้วอ่านแต่ละบรรทัด:
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "r") for line in f: print(line, end='') # 关闭打开的文件 f.close()
โปรแกรมข้างต้นผลลัพธ์คือ:
Python 是一个非常好的语言。 是的,的确非常好!!
วิธีนี้เป็นวิธีที่ง่ายมาก แต่มันก็ไม่ได้ให้การควบคุมที่ดี ทั้งสองเพราะกลไกในการประมวลผลที่แตกต่างกันก็เป็นสิ่งที่ดีที่สุดที่จะไม่ผสม
f.write (สตริง) สตริงเขียนไปยังแฟ้มและผลตอบแทนจำนวนตัวอักษรที่เขียน
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo.txt", "w") num = f.write( "Python 是一个非常好的语言。\n是的,的确非常好!!\n" ) print(num) # 关闭打开的文件 f.close()
โปรแกรมข้างต้นผลลัพธ์คือ:
29
หากคุณต้องการที่จะเขียนบางสิ่งที่ไม่เป็นสตริงคุณจะต้องมีการแปลง:
#!/usr/bin/python3 # 打开一个文件 f = open("/tmp/foo1.txt", "w") value = ('www.w3write.com', 14) s = str(value) f.write(s) # 关闭打开的文件 f.close()
โปรแกรมข้างต้นไฟล์ foo1.txt แบบเปิด:
$ cat /tmp/foo1.txt ('www.w3write.com', 14)
f.tell () ผลตอบแทนตำแหน่งวัตถุไฟล์ตั้งอยู่ในขณะนี้ก็คือจำนวนของไบต์จากจุดเริ่มต้นของการนับไฟล์ที่
หากคุณต้องการที่จะเปลี่ยนตำแหน่งปัจจุบันของไฟล์ที่คุณสามารถใช้ f.seek (offset, from_what) ฟังก์ชั่น
ค่า From_what ถ้ามันเป็นจุดเริ่มต้นของ 0 บ่งชี้ว่าถ้ามันเป็นจุดสิ้นสุดของ 1 ระบุตำแหน่งปัจจุบัน 2 ไฟล์ตัวอย่างเช่น:
ค่าเริ่มต้น from_what เป็น 0 นั่นคือจุดเริ่มต้นของไฟล์ นี่เป็นตัวอย่างที่สมบูรณ์แบบ:
>>> f = open('/tmp/foo.txt', 'rb+') >>> f.write(b'0123456789abcdef') 16 >>> f.seek(5) # 移动到文件的第六个字节 5 >>> f.read(1) b'5' >>> f.seek(-3, 2) # 移动到文件的倒数第三字节 13 >>> f.read(1) b'd'
เมื่อคุณทำกับไฟล์โทร f.close () เพื่อปิดแฟ้มและปล่อยทรัพยากรระบบถ้าคุณพยายามที่จะเรียกคืนไฟล์ยกเว้นจะโยน
>>> f.close() >>> f.read() Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: I/O operation on closed file <pre> <p> 当处理一个文件对象时, 使用 with 关键字是非常好的方式。在结束后, 它会帮你正确的关闭文件。 而且写起来也比 try - finally 语句块要简短:</p> <pre> >>> with open('/tmp/foo.txt', 'r') as f: th. read_data = f.read() >>> f.closed True
วัตถุไฟล์มีวิธีการอื่น ๆ เช่น isatty () และ trucate () มี แต่เหล่านี้มักจะน้อย
โมดูลหลามดองดำเนินการลำดับข้อมูลพื้นฐานและ deserialization
เราสามารถที่จะบันทึกโปรแกรมเป้าหมายการดำเนินงานเป็นอันดับโมดูลดองเรียกใช้ข้อมูลไปยังไฟล์ที่จัดเก็บข้อมูลถาวร
โดยโมดูลดอง deserialization เราสามารถสร้างโปรแกรมที่จะบันทึกวัตถุจากแฟ้ม
อินเตอร์เฟซพื้นฐาน:
pickle.dump(obj, file, [,protocol])
ด้วยการดองวัตถุนี้จะสามารถเปิดไฟล์ที่อ่าน:
x = pickle.load(file)
หมายเหตุ: อ่านสตริงจากแฟ้มและการฟื้นฟูของวัตถุหลามเดิม
file: ไฟล์วัตถุเช่นเดียวกับการอ่าน () และ ReadLine () อินเตอร์เฟซ
ตัวอย่างที่ 1:
#!/usr/bin/python3 import pickle # 使用pickle模块将数据对象保存到文件 data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close()
ตัวอย่างที่ 2:
#!/usr/bin/python3 import pprint, pickle #使用pickle模块从文件中重构python对象 pkl_file = open('data.pkl', 'rb') data1 = pickle.load(pkl_file) pprint.pprint(data1) data2 = pickle.load(pkl_file) pprint.pprint(data2) pkl_file.close()