Eslatma:
Oxirgi ikkita rejimni qo'llab-quvvatlash Python 3.3 dan keyingi versiyalardan boshlab taqdim etilgan.
Rejimni ko'rsatgandan so'ng, modifikator quyidagilarni bajarishi mumkin:
b – fayl ikkilik(binar) rejimda ochiladi. Fayl metodlari bayt tipidagi obyektlarni qabul qiladi va qaytaradi.
t – fayl matn rejimida ochiladi (Windows OTda standart xolda shunday). Fayl metodlari str tipidagi ob'ektlarni qabul qiladi va qaytaradi. Ushbu rejimda satr oxiridagi belgini qayta ishlash avtomatik ravishda amalga oshiriladi - masalan, Windows OTda o'qish paytida \ r \ n belgilar \ n belgisi bilan almashtiriladi. Masalan, file.txt faylini yaratib, unga ikkita qator yozamiz:
>>> f = open ( r"file . txt", "w") # Yozish uchun faylni ochamiz
>>> f.write( "Stringl\nString2") # Faylga ikkita satr yozamiz
15
>>> f.close() # Faylni yopamiz
w rejimini belgilaganimiz uchun, agar fayl mavjud bo'lmasa, u yaratiladi va agar mavjud bo'lsa, uning ustiga yoziladi.
Endi faylning tarkibini ikkilik(binar) va matnli rejimlarda ko’rib chiqamiz:
>>> # Ikkilik(binar) rejimi (\ r belgisi qoladi)
>>> with open (r"file . txt", "rb") as f:
for line in f:
print( repr ( line ) )
b ' Stringl\r\n '
b ' String2 '
>>> # Matn rejimi ( \ r belgisi o’chiriladi)
>>> with open ( r"file . txt", "r") as f:
for line in f:
print (repr ( line ) )
' Stringl\n '
' String2 '
Ishni tezlashtirish uchun yozilgan ma'lumotlar buferlanadi. Buferdan olingan ma'lumotlar faylga faqat faylni yopish paytida yoki funktsiya yoki flush() metodi chaqirilgandan so'ng to'liq yoziladi. Bufer hajmining ixtiyoriy parametrlarini bufferingdan foydalanib belgilash mumkin. Agar 0 qiymat sifatida ko'rsatilgan bo'lsa, ma'lumotlar darhol faylga yoziladi (qiymat faqat ikkilik rejimda amal qiladi). Faylga satrma-satr yozishda 1 qiymati ishlatiladi (qiymat faqat matn rejimida amal qiladi), boshqa musbat raqam buferning taxminiy hajmini belgilaydi va manfiy qiymat (yoki qiymat yo'q) tizimning standart o'lchamini belgilaydi. Odatda, matnli fayllar satrma-satr buferlanadi va ikkilik fayllar qismlarga bo'linadi, ularning o'lchamlarini interpretator o'zi 4096 dan 8192 baytgacha diapozoni bo’yicha tanlaydi. Matn rejimidan foydalanganda (standart ravishda), faylni o'qiyotganda ma'lumotlarni Unicode kodlashiga o'tkazishga harakat qilinadi va yozishda qarama-qarshi operatsiya amalga oshiriladi - satr ma'lum bir kodlashda baytlar ketma-ketligiga aylantiriladi. Odatda, tizimda ishlatiladigan kodlash standart belgilanadi. Agar o’tkazishning iloji bo'lmasa, xatolik qaytariladi. encoding parametri sizga faylni yozishda va o'qishda foydalaniladigan kodlarni belgilashga imkon beradi. Masalan, ma'lumotlarni UTF-8 da kodlashni ko’raylik:
>>> f = open(r"file.txt" , "w", encoding="utf -8 ")
>>> f.write( "Satr") # Satrni faylga yozamiz
6
>>> f.close () # Faylni yopamiz.
Ushbu faylni o'qish uchun faylni ochishda kodlashni aniq belgilashingiz kerak:
>>> with open ( r"file . tx t ", "r", encoding="utf-8 ") as f:
for line in f:
print ( line)
Satr
UTF-8, UTF-16 va UTF-32 kodlashlaridagi fayllar bilan ishlashda, faylning boshida qisqacha BOM (Byte Order Mark – baytlar tartibi belgisi) deb nomlangan xizmat belgilari bo'lishi mumkin. Ushbu belgilar UTF-8 da kodlash uchun ixtiyoriydir va oldingi misolda ular yozish paytida faylga qo'shilmagan. Belgilar qo'shilishi uchun encoding parametrida utf-8-sig ni ko'rsatishingiz kerak. Qatorni BOM bilan UTF-8 kodlashdagi faylga yozamiz:
>>> f = open (r"file . txt " , "w" , encoding="utf-8-sig" )
>>> f.write( "Satr" ) # Satrni faylga yozamiz
6
>>> f.close() # Faylni yopamiz.
Endi encoding parametridagi har xil qiymatdagi faylni o'qiylik:
>>> with open ( r"file . txt" , "r" , encoding="utf-8" ) as f :
for line in f :
print(repr(line) )
' \u feffSatr'
>>> with open (r"file . tx t", "r" , encoding="utf-8-sig") as f:
for line in f:
print(repr(line) )
‘Satr’
Birinchi misolda biz utf-8 qiymatini ko'rsatdik, shuning uchun ma'lumotlar bilan birga BOM markeri fayldan o'qildi. Ikkinchi misolda utf-8-sig qiymati ko'rsatilgan, shuning uchun BOM markeri natijaga kiritilmagan. Agar siz faylda marker mavjudligini bilmasangiz va siz markersiz ma'lumotlarni olishingiz kerak bo'lsa, u holda faylni UTF-8 kodlashda o'qiyotganda har doim utf-8-sig qiymatini belgilashingiz kerak. UTF-16 va UTF-32 kodlashlari uchun BOM markeri albatta kerak. encoding parametrida utf -16 va utf-32 qiymatlarini belgilashda belgi avtomatik ravishda qayta ishlanadi. Ma'lumotlarni yozishda marker avtomatik ravishda faylning boshiga kiritiladi va o'qiyotganda natijada ko'rinmaydi. Satrni faylga yozamiz, keyin uni fayldan o'qiymiz:
>>> with open ( r"file.txt ", "w" , encoding="utf-16" ) as f:
f. write ( "Satr" )
6
>>> with open (r"file.txt", "r", encoding="utf-16") as f:
for line in f:
print (repr(line))
‘Satr’
Utf-16-le, Utf-16-be, Utf-32-le va Utf-32-be qiymatlaridan foydalanganda faylning boshiga BOM markerini qo'shish kerak va o'qiyotganda uni o'chirish kerak.
errors parametrida siz xatolar bilan ishlash darajasini belgilashingiz mumkin. Bu parametr qo’llashi mumkin bo'lgan qiymatlar:
"strict" (xatolik ro’y berganda ValueError istisnosini qaytaradi - standart xolda)
"replace" (noma'lum belgi so’roq belgisi bilan yoki \ufffd kodli belgi bilan almashtiriladi)
" ignore" (noma'lum belgilar e'tiborga olinmaydi)
"xmlcharrefreplace" (noma'lum belgi xxx ketma-ketlik bilan almashtiriladi)
"backslashreplace" (noma'lum belgi \uxxxx ketma-ketligi bilan almashtiriladi)
newline parametri satr oxiridagi belgilar uchun ishlov berish rejimini o'rnatadi. Bu parametr qo’llashi mumkin bo'lgan qiymatlar:
None (standart xolda) – satr oxiridagi belgilar uchun standart ishlov berishni amalga oshiradi. Masalan, Windows OTda faylni o'qish paytida \r\n belgisi \n ga aylanadi, teskarisi esa yozishda amalga oshiriladi;
“” (bo’sh satr) – satr oxirigacha ishlov berish amalga oshirilmaydi;
"" – ko’rsatilgan maxsus belgi satr oxirini belgilash uchun ishlatiladi va qo'shimcha ishlov berish amalga oshirilmaydi. Faqat \r\n, \r va \n lar maxsus belgilar sifatida ko'rsatilishi mumkin.
Do'stlaringiz bilan baham: |