Latest web development tutorials

การป้อนข้อมูลและการส่งออก Python3

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


รูปแบบการออกสวยงาม

งูหลามวิธีที่สองค่าเอาท์พุท: งบการแสดงออกและการพิมพ์ () ฟังก์ชัน

วิธีที่สามคือการใช้การเขียน () วิธีวัตถุแฟ้มแฟ้มออกมาตรฐานสามารถใช้ sys.stdout อ้างอิง

หากคุณต้องการที่จะส่งออกในรูปแบบของความหลากหลายมากขึ้นคุณสามารถใช้ str.format () ฟังก์ชั่นการจัดรูปแบบมูลค่าส่งออก

หากคุณต้องการที่จะกลายเป็นค่าสตริงของการส่งออก, คุณสามารถใช้ Repr () หรือ STR () ฟังก์ชันเพื่อให้บรรลุ

  • STR () ฟังก์ชันส่งกลับผู้ใช้รูปแบบที่อ่านในการแสดงออก
  • Repr (): สร้างรูปแบบของการแสดงออกล่ามสามารถอ่านได้

เช่น

>>> 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) + '...'
>>> print(s)
x 的值为: 32.5,  y 的值为:40000...
>>> #  repr() 函数可以转义字符串中的特殊字符
... hello = 'hello, w3big\n'
>>> hellos = repr(hello)
>>> print(hellos)
'hello, w3big\n'
>>> # repr() 的参数可以是 Python 的任何对象
... repr((x, y, ('Google', 'w3big')))
"(32.5, 40000, ('Google', 'w3big'))"

มีสองวิธีในการส่งออกตารางและลูกบาศก์ตาราง:

>>> for x in range(1, 11):
...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
...     # 注意前一行 'end' 的使用
...     print(repr(x*x*x).rjust(4))
...
 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):
...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
...
 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.w3big.com'))
本教程网址: "www.w3big.com!"

และภายในตัวละครวงเล็บ (เรียกว่าสาขารูปแบบ) จะถูกแทนที่ด้วยพารามิเตอร์รูปแบบ () ใน

รูปแบบตำแหน่ง () ในตัวเลขในวงเล็บจะใช้ในการชี้วัตถุที่เข้ามาดังต่อไปนี้:

>>> print('{0} 和 {1}'.format('Google', 'w3big'))
Google 和 w3big
>>> print('{1} 和 {0}'.format('Google', 'w3big'))
w3big 和 Google

หากมีข้อโต้แย้งคำหลัก () ในรูปแบบแล้วค่าของพวกเขาจะชี้ไปที่ชื่อของพารามิเตอร์

>>> print('{name}网址: {site}'.format(name='本教程', site='www.w3big.com'))
本教程网址: www.w3big.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():
...     print('{0:10} ==> {1:10d}'.format(name, number))
...
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)

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

โหมด ลักษณะ
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()
  • พารามิเตอร์ตัวแรกเป็นชื่อของไฟล์ที่คุณต้องการเปิด
  • ตัวละครพารามิเตอร์ที่สองอธิบายวิธีการใช้ไฟล์ โหมดสามารถ 'R' ถ้าแฟ้มได้อ่านอย่างเดียว 'w' เพียงเขียน (ถ้าไฟล์ที่มีอยู่จะถูกลบ) และ '' สำหรับเนื้อหาของแฟ้มเพิ่มเติม; ข้อมูลใด ๆ ที่เขียนจะถูกเพิ่มโดยอัตโนมัติไปยังจุดสิ้นสุด . 'R +' สำหรับทั้งอ่านและเขียน อาร์กิวเมนต์โหมดเป็นตัวเลือก 'R' จะเป็นค่าเริ่มต้น

เปิดไฟล์ foo.txt ปรากฏดังนี้

$ cat /tmp/foo.txt 
Python 是一个非常好的语言。
是的,的确非常好!!

วิธีการของวัตถุไฟล์

ตัวอย่างเช่นนี้อนุมานว่าส่วนที่เหลือได้สร้างวัตถุไฟล์ที่เรียกว่า F ของ

f.read ()

หากต้องการอ่านเนื้อหาของแฟ้มที่เรียก f.read (ขนาด) ซึ่งจะอ่านจำนวนหนึ่งของข้อมูลและแล้วก็กลับมาเป็นสตริงหรือวัตถุไบต์

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

ตัวอย่างต่อไปนี้อนุมานว่า foo.txt ไฟล์ที่มีอยู่ (ในตัวอย่างข้างต้นได้รับการสร้าง):

#!/usr/bin/python3

# 打开一个文件
f = open("/tmp/foo.txt", "r")

str = f.read()
print(str)

# 关闭打开的文件
f.close()

โปรแกรมข้างต้นผลลัพธ์คือ:

Python 是一个非常好的语言。
是的,的确非常好!!

f.readline ()

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 ()

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 ()

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.w3big.com', 14)
s = str(value)
f.write(s)

# 关闭打开的文件
f.close()

โปรแกรมข้างต้นไฟล์ foo1.txt แบบเปิด:

$ cat /tmp/foo1.txt 
('www.w3big.com', 14)

f.tell ()

f.tell () ผลตอบแทนตำแหน่งวัตถุไฟล์ตั้งอยู่ในขณะนี้ก็คือจำนวนของไบต์จากจุดเริ่มต้นของการนับไฟล์ที่

f.seek ()

หากคุณต้องการที่จะเปลี่ยนตำแหน่งปัจจุบันของไฟล์ที่คุณสามารถใช้ f.seek (offset, from_what) ฟังก์ชั่น

ค่า From_what ถ้ามันเป็นจุดเริ่มต้นของ 0 บ่งชี้ว่าถ้ามันเป็นจุดสิ้นสุดของ 1 ระบุตำแหน่งปัจจุบัน 2 ไฟล์ตัวอย่างเช่น:

  • แสวงหา (x, 0): จากตำแหน่งเริ่มต้นที่เป็นบรรทัดแรกของตัวอักษรตัวแรกของไฟล์เริ่มย้ายตัวอักษร X
  • แสวงหา (x, 1): แสดงให้เห็นตัวละครเคลื่อนไหว x ย้อนกลับจากตำแหน่งปัจจุบัน
  • แสวงหา (-x, 2): แสดงให้เห็นถึงตัวละคร X มือถือจากปลายไปข้างหน้าของไฟล์

ค่าเริ่มต้น 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 ()

ในแฟ้มข้อความ (ไม่ b ผู้เปิดโหมดไฟล์) เท่านั้นส่วนที่เกี่ยวกับการเริ่มต้นของไฟล์ที่จะค้นหา

เมื่อคุณทำกับไฟล์โทร 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:
...     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()