ความแตกต่างระหว่างfile
และopen
ในงูใหญ่คืออะไร? เมื่อใดที่ฉันควรใช้อันไหน (บอกว่าฉันอยู่ใน 2.5)
ความแตกต่างระหว่างfile
และopen
ในงูใหญ่คืออะไร? เมื่อใดที่ฉันควรใช้อันไหน (บอกว่าฉันอยู่ใน 2.5)
คำตอบ:
open()
คุณควรใช้
ตามที่ระบุในเอกสาร :
เมื่อเปิดไฟล์ควรใช้ open () แทนการเรียก constructor นี้โดยตรง ไฟล์มีความเหมาะสมมากกว่าในการพิมพ์การทดสอบ (ตัวอย่างเช่นการเขียน "isinstance (f, file)")
และfile()
ถูกลบไปตั้งแต่ Python 3.0
สองเหตุผล: ปรัชญาของงูใหญ่ "มีทางหนึ่งที่ควรทำ" และfile
กำลังจะหายไป
file
เป็นประเภทที่แท้จริง (ใช้เช่นfile('myfile.txt')
กำลังเรียกตัวสร้าง) open
เป็นฟังก์ชั่นจากโรงงานที่จะคืนค่าวัตถุไฟล์
ใน python 3.0 file
กำลังจะย้ายจากการเป็นบิวด์อินไปสู่การใช้งานโดยหลายคลาสในio
ไลบรารี (ค่อนข้างคล้ายกับ Java ที่มีตัวอ่านบัฟเฟอร์ ฯลฯ )
file()
เป็นประเภทเช่น int หรือรายการ open()
เป็นฟังก์ชั่นสำหรับเปิดไฟล์และจะส่งคืนfile
วัตถุ
นี่คือตัวอย่างของเวลาที่คุณควรใช้ open:
f = open(filename, 'r')
for line in f:
process(line)
f.close()
นี่คือตัวอย่างของเวลาที่คุณควรใช้ไฟล์:
class LoggingFile(file):
def write(self, data):
sys.stderr.write("Wrote %d bytes\n" % len(data))
super(LoggingFile, self).write(data)
อย่างที่คุณเห็นมีเหตุผลที่ดีสำหรับทั้งคู่และการใช้งานที่ชัดเจนสำหรับทั้งสองกรณี
with
คำสั่ง with open(filename, 'r') as f: \ for line in f: \ process(line)
. นี่เป็นการหลีกเลี่ยงการปิดอย่างชัดเจน Python 2.6 ขึ้นไปสนับสนุนการwith
ประกาศอย่างเป็นทางการ ใน Python 2.5 คุณจะต้องเพิ่มfrom __future__ import with_statement
รหัสด้านบนลงไป
file
คลาสนั้นมีวิธีพิเศษที่จะเรียกโดยอัตโนมัติเมื่อใดก็ตามที่ไฟล์ถูกเปิดผ่านwith
คำสั่ง วิธีพิเศษเหล่านี้ทำให้มั่นใจได้ว่าไฟล์จะเปิดและปิดอย่างถูกต้องและปลอดภัย
หน้าที่ทั้งสองเหมือนกัน open
จะโทรfile
ต่อไปดังนั้นความแตกต่างในปัจจุบันจึงเป็นเรื่องของสไตล์ เอกสารงูใหญ่open
แนะนำให้ใช้
เมื่อเปิดไฟล์ควรใช้ open () แทนที่จะเรียกใช้ตัวสร้างไฟล์โดยตรง
เหตุผลก็คือในรุ่นอนาคตพวกเขาจะไม่รับประกันว่าจะเหมือนเดิม ( open
จะกลายเป็นฟังก์ชั่นโรงงานซึ่งจะส่งคืนวัตถุประเภทต่าง ๆ ขึ้นอยู่กับเส้นทางที่เปิด)
ใช้ open () เพื่อเปิดไฟล์เท่านั้น ไฟล์ () กำลังถูกลบใน 3.0 และเลิกใช้แล้วในขณะนี้ พวกเขามีความสัมพันธ์แปลก ๆ แต่ตอนนี้ไฟล์ () กำลังดำเนินไปดังนั้นไม่จำเป็นต้องกังวลอีกต่อไป
ต่อไปนี้มาจากเอกสาร Python 2.6 [สิ่งวงเล็บ] เพิ่มโดยฉัน
เมื่อเปิดไฟล์ควรใช้ open () แทนที่จะเรียกใช้ constructor [file ()] นี้โดยตรง ไฟล์เหมาะสำหรับการพิมพ์ทดสอบมากขึ้น (เช่นการเขียน isinstance (f, file)
จากคำกล่าวของ Mr Van Rossum ถึงแม้ว่า open () เป็นชื่อแทนของไฟล์ () คุณควรใช้ open () เพราะอาจมีการเปลี่ยนแปลงในอนาคต