w
หรือ a
แทนที่จะเป็น r
แบบตอนอ่านopen
เพื่อเปิดอะไรที่ว่างเปล่านั้นขึ้น ซึ่งการเปิดในที่นี้นั้นเท่ากับเป็นการสร้างไฟล์ขึ้นมาopen
ไฟล์ในโหมด w
จะพบว่าไฟล์นั้นถูกสร้างขึ้นมาทันทีหากมันไม่ได้มีตัวตนอยู่แต่แรก
f = open('xxxx.txt','w',encoding='utf-8')
f.close()
w
กับ a
นั้นจะต่างกันตรงที่ว่าในกรณีที่ไฟล์เดิมมีตัวตนอยู่แล้วถ้าเป็นโหมด w
ไฟล์จะถูกเขียนทับใหม่ทันที แต่ถ้าเป็น a
จะเป็นการเขียนต่อจากไฟล์เดิม.write
กับ .writelines
ข้อแตกต่างคือ .write
จะใช้กับสายอักขระอันเดียว แต่ .writelines
จะใช้กับลิสต์ของสายอักขระ.write
หรือ .writelines
ก็ได้เหมือนกันทั้งคู่
s = '''เวลาที่เข้าหาผู้อื่น ให้มีหัวใจที่อบอุ่นดั่งฤดูใบไม้ผลิ
เวลาที่ทำงาน ให้มีหัวใจที่เร่าร้อนดั่งฤดูร้อน
เวลาที่คิดอะไร ให้มีหัวใจที่แจ่มใสดั่งฤดูใบไม้ร่วง
เวลาที่เผชิญหน้ากับตัวเอง ให้มีหัวใจที่เข้มงวดดั่งฤดูหนาว'''
f = open('samejima.txt','w',encoding='utf-8')
f.write(s)
#หรือ f.writelines(s)
f.close()
(ที่มาของข้อความ).writelines
เช่น
s = ['เวลาที่เข้าหาผู้อื่น ให้มีหัวใจที่อบอุ่นดั่งฤดูใบไม้ผลิ', 'เวลาที่ทำงาน ให้มีหัวใจที่เร่าร้อนดั่งฤดูร้อน', 'เวลาที่คิดอะไร ให้มีหัวใจที่แจ่มใสดั่งฤดูใบไม้ร่วง', 'เวลาที่เผชิญหน้ากับตัวเอง ให้มีหัวใจที่เข้มงวดดั่งฤดูหนาว']
f = open('samejima.txt','w',encoding='utf-8')
f.writelines(s)
f.close()
.write
ก็อาจใช้เป็น f.write('\n'.join(s))
คือใช้เมธอด .join
เพื่อรวมสายอักขระเข้าด้วยกันโดยมีการขึ้นบรรทัดใหม่เป็นตัวแบ่ง.write
หลายครั้งจะเป็นการเขียนต่อไปเรื่อยๆ โดยจะไม่มีการขึ้นบรรทัดใหม่ให้ดังนั้นต้องเติม \n
ไปด้วย
for a in s:
f.write(a+'\n')
f = open('10000.txt','w',encoding='utf-8')
for i in range(1,10001):
f.write('|%d|'%i)
if(i%100==0): f.write('\n') # ขึ้นบรรทัดใหม่ถ้านับถึง 100
f.close()
r
คือพอเปิดไฟล์มาก็จะถูกลบทิ้งแล้วเริ่มเขียนใหม่ทันที ถ้าอยากให้ไฟล์เขียนต่อก็แค่เปลี่ยน r
เป็น a
เท่านั้น ลองทำดูกันได้f1 = open('nishikaze.txt','r',encoding='utf-8') # เปิดไฟล์ต้นฉบับ
f2 = open('nishikaze2.txt','w',encoding='utf-8') # กำหนดไฟล์ใหม่ที่จะเขียน
a = f1.read() # นำข้อมูลจากไฟล์ต้นฉบับมาเก็บในตัวแปร
f2.write(a) # นำข้อมูลจากตัวแปรมาเขียนลงในไฟล์ใหม่
f1.close() # ปิดไฟล์ต้นฉบับ
f2.close() # ปิดไฟล์ที่เขียนเสร็จ
copyfile
ในมอดูล shutil
import shutil
shutil.copyfile('nishikaze.txt', 'nishikaze2.txt')
move
เอาไว้ย้ายไฟล์
import shutil
shutil.move('nishikaze2.txt', 'nishikaze3.txt')
f = open('nishikaze.txt','r',encoding='utf-8') # เปิดไฟล์ต้นฉบับ
i = 1
for r in f: # วนซ้ำเพื่อแยกวิเคราะห์ทีละบรรทัด
if(r=='\n'): continue # หากบรรทัดไหนว่างเปล่าก็ข้ามไปเลย ไม่ต้องสร้างไฟล์ บรรทัดที่ว่างคือบรรทัดที่มีแต่ \n คือคำสั่งขึ้นบรรทัดใหม่
fw = open('n%02d.txt'%i,'w',encoding='utf-8') # สร้างไฟล์ใหม่ ตั้งชื่อเป็น n ตามด้วยหมายเลข
fw.writelines(r) # เขียนข้อมูลที่อ่านได้ในบรรทัดนั้นลงไฟล์
fw.close() # ปิดไฟล์ที่เขียน
i += 1
f.close() # ปิดไฟล์ต้นฉบับ
rahat = input('ป้อนรหัสผู้สอบ: ')
physics = input('คะแนนฟิสิกส์: ')
chemi = input('คะแนนเคมี: ')
chiwa = input('คะแนนชีวะ: ')
f = open('khanaen.txt','a',encoding='utf-8')
f.write('%s %s %s %s\n'%(rahat,physics,chemi,chiwa))
f.close()
590001 90 76 84
590003 99 90 88
590007 80 92 100
.read
แล้ว .split
แยกเอาแต่ละส่วนf = open('khanaen.txt','r',encoding='utf-8')
physics = []
chemi = []
chiwa = []
for s in f:
a = s.split()
physics += [int(a[1])]
chemi += [int(a[2])]
chiwa += [int(a[3])]
f.close()
print('คะแนนฟิสิกส์ ต่ำสุด=%d, สูงสุด=%d, เฉลี่ย=%.2f'%(min(physics),max(physics),sum(physics)/len(physics)))
print('คะแนนเคมี ต่ำสุด=%d, สูงสุด=%d, เฉลี่ย=%.2f'%(min(chemi),max(chemi),sum(chemi)/len(chemi)))
print('คะแนนชีววิทยา ต่ำสุด=%d, สูงสุด=%d, เฉลี่ย=%.2f'%(min(chiwa),max(chiwa),sum(chiwa)/len(chiwa)))
\t
หรือในกรณีไฟล์ชนิด .csv จะกั้นด้วยจุลภาค ,
w
หรือ a
w
กับ a
ต่างกันตรงที่ w
เป็นการเขียนทับ ส่วน a
เป็นการเขียนต่อwrite
และ writelines
write
ใช้กับสายอักขระ ส่วน writelines
ใช้กับลิสต์ของสายอักขระshutil.copyfile
ก็ได้ติดตามอัปเดตของบล็อกได้ที่แฟนเพจ