ขอแก้ตัวในความสับสนของฉันที่นี่ แต่ฉันได้อ่านเอกสารเกี่ยวกับฟังก์ชั่นการค้นหา () ใน python (หลังจากที่ต้องใช้งาน) และแม้ว่ามันจะช่วยฉันได้ แต่ฉันก็ยังสับสนเล็กน้อยเกี่ยวกับความหมายที่แท้จริงของสิ่งที่ทำ แต่คำอธิบายใด ๆ ก็มีมาก ชื่นชมขอบคุณ
ขอแก้ตัวในความสับสนของฉันที่นี่ แต่ฉันได้อ่านเอกสารเกี่ยวกับฟังก์ชั่นการค้นหา () ใน python (หลังจากที่ต้องใช้งาน) และแม้ว่ามันจะช่วยฉันได้ แต่ฉันก็ยังสับสนเล็กน้อยเกี่ยวกับความหมายที่แท้จริงของสิ่งที่ทำ แต่คำอธิบายใด ๆ ก็มีมาก ชื่นชมขอบคุณ
คำตอบ:
เกี่ยวกับ seek()
นี้ไม่ต้องกังวลมากเกินไป
ก่อนอื่นมันมีประโยชน์เมื่อใช้งานกับไฟล์ที่เปิดอยู่
สิ่งสำคัญที่ต้องทราบว่าไวยากรณ์มีดังนี้:
fp.seek(offset, from_what)
ที่fp
เป็นตัวชี้ไฟล์ที่คุณกำลังทำงานกับ; offset
หมายถึงจำนวนตำแหน่งที่คุณจะย้าย from_what
กำหนดจุดอ้างอิงของคุณ:
หากละเว้นfrom_what
ค่าเริ่มต้นคือ 0
อย่าลืมว่าเมื่อจัดการไฟล์จะมีตำแหน่งอยู่ในไฟล์ที่คุณกำลังทำงานอยู่เสมอ เมื่อเพิ่งเปิดตำแหน่งนั้นจะเป็นจุดเริ่มต้นของไฟล์ แต่เมื่อคุณทำงานกับมันคุณอาจก้าวไปข้างหน้า
seek
จะเป็นประโยชน์กับคุณเมื่อคุณต้องใช้walk
ไฟล์ที่เปิดอยู่นั้นเช่นเดียวกับเส้นทางที่คุณกำลังเดินทางไป
เมื่อคุณเปิดไฟล์ระบบจะชี้ไปที่จุดเริ่มต้นของไฟล์ การอ่านหรือเขียนใด ๆ ที่คุณทำจะเกิดขึ้นตั้งแต่เริ่มต้น การseek()
ดำเนินการจะย้ายตัวชี้นั้นไปยังส่วนอื่นของไฟล์เพื่อให้คุณสามารถอ่านหรือเขียนในตำแหน่งนั้นได้
ดังนั้นหากคุณต้องการอ่านทั้งไฟล์ แต่ข้าม 20 ไบต์แรกให้เปิดไฟล์seek(20)
เพื่อย้ายไปยังตำแหน่งที่คุณต้องการเริ่มอ่านจากนั้นอ่านไฟล์ต่อ
หรือบอกว่าคุณต้องการอ่านทุกๆ 10 ไบต์คุณสามารถเขียนลูปที่ทำseek(9, 1)
(เลื่อนไปข้างหน้า 9 ไบต์เทียบกับตำแหน่งปัจจุบัน) read(1)
(อ่านทีละไบต์) ทำซ้ำ
seek
ฟังก์ชั่นคาดหวังฯชดเชยไบต์
ดังนั้นหากคุณมีไฟล์ข้อความที่มีเนื้อหาต่อไปนี้:
simple.txt
abc
คุณสามารถข้าม1 ไบต์เพื่อข้ามอักขระตัวแรกดังต่อไปนี้:
fp = open('simple.txt', 'r')
fp.seek(1)
print fp.readline()
>>> bc
fp = open('afile.png', 'rb')
fp.seek(16)
print 'width: {0}'.format(struct.unpack('>i', fp.read(4))[0])
print 'height: ', struct.unpack('>i', fp.read(4))[0]
หมายเหตุ:เมื่อคุณโทรหาคุณมีการเปลี่ยนแปลงตำแหน่งของหัวอ่านซึ่งการกระทำเช่น
read
seek
สำหรับสตริงอย่าลืมใช้ WHENCE: ใช้ f.seek (0) เพื่อวางตำแหน่งที่จุดเริ่มต้นของไฟล์และ f.seek (len (f) +1) เพื่อวางตำแหน่งที่ท้ายไฟล์ ใช้เปิด (ไฟล์ "r +") เพื่ออ่าน / เขียนที่ใดก็ได้ในไฟล์ หากคุณใช้ "a +" คุณจะสามารถเขียน (ต่อท้าย) ที่ส่วนท้ายของไฟล์ได้เท่านั้นไม่ว่าคุณจะวางเคอร์เซอร์ไว้ที่ใดก็ตาม
os.SEEK_SET
,os.SEEK_CUR
และos.SEEK_END
แทนหมายเลขมายากล0
,1
และ2
ตามลำดับ