1-sahifa 2-sahifa


Download 363.98 Kb.
bet14/21
Sana06.06.2020
Hajmi363.98 Kb.
#115448
1   ...   10   11   12   13   14   15   16   17   ...   21
Bog'liq
Python


Anjir. 18.2. Qatorning birinchi to'rtta belgisini ajratib ko'rsatish. Uch variant ko'rsatilgan;

ikkinchisi afzal deb hisoblanadi. Nol indeks ko'rsatilmagan, xuddi shunday

sukut bo'yicha ishlatilgan. Salbiy indeks echimi ko'rinadi

shunchaki ahmoq. So'nggi uchta belgi ham ko'rsatilgan. Va yana

Ikkinchi variant idiomatik echim deb hisoblanadi. Birinchi ikkita variant

satr uzunligi 8 ta belgidan iborat bo'lishini va oxirgisi ishlashini tavsiya eting

kamida 3 ta belgidan iborat har qanday satr bilan

Bir bo'lakni yo'g'on ichak bilan belgilashda ( :), birinchi indeks bo'lmaydi

majburiy. Agar birinchi indeks ko'rsatilmagan bo'lsa, standart tilim

U ro'yxatning birinchi elementidan boshlanadi (nol element):





166-bet

166

18-bob. Indekslash va kesish

>>> chop etish (my_pets [: 2])

['it', 'mushuk']

Bo'laklar salbiy ko'rsatkichlardan ham foydalanishlari mumkin. Salbiy

ham boshlang'ich, ham oxirgi pozitsiyalar ahamiyatli bo'lishi mumkin. Indeks

-1 oxirgi elementni anglatadi. Agar tilim cho'zilsa

oxirgi elementdan, siz ushbu elementdan tashqari hamma narsani olasiz:

>>> my_pets [0: -1]

['it', 'mushuk']

>>> my_pets [: - 1] # asl qiymati 0 ga teng

['it', 'mushuk']

>>> my_pets [0: -2]

['it']


Ikkinchi indeks ham ixtiyoriydir. Agar oxirgi bo'lsa

deklaratsiya yo'q, standart tilim ro'yxatning oxirigacha cho'ziladi:

>>> my_pets [1:]

['mushuk', 'qush']

>>> my_pets [-2:]

['mushuk', 'qush']

Va nihoyat, boshlang'ich va tugatish indeksidan foydalanish mumkin

standart qiymatlar. Agar ikkala indeks yo'q bo'lsa, unda

Tilim boshidan oxirigacha ishlaydi (va ro'yxatning nusxasini o'z ichiga oladi). Bu

dizayni ro'yxatlarni tezda nusxalash uchun ishlatilishi mumkin

Python-da:

>>> chop etish (my_pets [:])

['it', 'mushuk', 'qush']

18.3. Dilimlarni oshirish

Boshlanish va tugash indekslaridan keyin tilim shuningdek

etishtirish. Agar hech qanday o'sish ko'rsatilmagan bo'lsa, asl qiymati

1-qism. 1-sonning ortishi ketma-ketlik olinishini anglatadi

indekslar orasidagi har bir element. Har ikkisi 2 qadam bilan olinadi.

ikkinchi element, uchta ortib borishda - har uchinchi va boshqalar:





167-bet

18.3. Dilimlarni oshirish

167

>>> my_pets = ["it", "mushuk", "qush"]

>>> it_and_bird = my_pets [0: 3: 2]

>>> chop etish (dog_and_bird)

['it', 'qush']

>>> nol_three_six = [0, 1, 2, 3, 4, 5, 6] [:: 3]

>>> chop etish (nol_three_six)

[0, 3, 6]



ESLATMA

Diapazon funktsiyasi, shuningdek kattalashtirishni belgilaydigan uchinchi parametrni ham qo'llab-quvvatlaydi.

nie:

>>> ro'yxati (oralig'i (0, 7, 3))



[0, 3, 6]

O'sish manfiy bo'lishi mumkin. -1-ning o'sishi shuni anglatadi

siz o'ngdan chapga orqaga harakatlanasiz. Foydalanish uchun

manfiy o'sish, boshlang'ich indeks qiymatini ko'rsatish

finaldan ko'proq. Istisno - bu vaziyat

ikkalasi ham boshlang'ich va yakuniy indeks: o'sish –1 o'zgartirish

ketma-ketlikdagi ketma-ketlikdagi elementlar:

>>> my_pets [0: 2: -1]

[]

>>> my_pets [2: 0: -1]



['qush', 'mushuk']

>>> bosma ([1, 2, 3, 4] [:: - 1])

[4, 3, 2, 1]

Keyingi safar intervyuda sizdan tartibni qayta tiklashingiz so'raladi

teskari tartibda satr belgilar, bu bir satrda amalga oshirilishi mumkin:

>>> 'erix' [:: - 1]

"hireme"

Albatta, buni sizga C. da bajarish talab etiladi. Shunchaki ska

Python-da dasturlashni xohlagan narsangiz bilan yashang!



168-bet

168

18-bob. Indekslash va kesish



18.4. Xulosa

Indekslash operatsiyalari individni ajratib olish uchun ishlatiladi

ketma-ketlikdan qiymatlar. Masalan, ular yarmini osonlashtiradi

satrdan yoki ro'yxatdan yoki satrdan biror belgi o'qing.

Agar ketma-ketlik kerak bo'lsa, sintaksisdan foydalaning

tilim dizayni. Bo'laklar yarim ochiq intervallar printsipiga mos keladi -

qo'lga oling va yakuniy indeksga ketma-ketlikni bering (shu jumladan).

Agar siz qo'shimcha o'sishni bajarsangiz, o'tkazib yuborishingiz mumkin

tilim hosil qilganda elementlar.

Python salbiydan foydalanishning qulay usulini ta'minlaydi

indeks yoki tilim nisbatan nisbiy qiymatlar

ketma-ketlikning oxirida. Bu sizga operatsiyalarni amalga oshirishga imkon beradi

ketma-ketlikning uzunligiga nisbatan, shuning uchun sizga kerak emas

uzunlikni hisoblash va olingan ssudani chegirish haqida tashvishlaning

ko'p natijalar.

18.5. Mashqlar

1. Formatda saqlanadigan ismingiz bilan o'zgaruvchini yarating

ki. Birinchisini olish uchun indekslash operatsiyalaridan foydalaning

belgi. So'nggi belgini olib tashlang. Kodingiz olinadimi?

Oxirgi belgilar ixtiyoriy uzunlik nomi bilan ishlaydimi?

2. Fayl nomi bilan o'zgaruvchini yarating . Fayl nomi orqasida deb faraz

uch harfli kengaytmadan so'ng, kengaytmani ishlatib toping

tilim operatsiyasini chaqirish. Shunday qilib, README.txt fayli bo'lishi kerak

txt kengaytmasi qabul qilindi . Sizning kodingiz ismlar bilan ishlaydimi?

ixtiyoriy uzunlikdagi fayllar?

3. Buni tekshirish uchun is_palindrome funktsiyasini yarating

so'z ikkala yo'nalishda ham bir xil o'qiladi.





169-bet

19 I / O operatsiyalari

fayllar bilan

Fayllarni o'qish va yozish operatsiyalari ko'pincha dastur- dan topiladi.

nii. Python ushbu operatsiyalarni sezilarli darajada soddalashtiradi.

Ikkala matnli va ikkilik fayllarni o'qishingiz mumkin; o'qish mumkin

baytlar, chiziqlar va hatto faylning butun tarkibini bajarish mumkin.

Shunga o'xshash xususiyatlar fayllarni yozib olish uchun mavjud.



19.1. Fayllarni ochish

Python ochiq funktsiyasi fayl ob'ektini qaytaradi. Bu xususiyat bo'lishi mumkin

Bir nechta ixtiyoriy parametrlarni oling:

ochish (fayl nomi, mode = 'r', buferlash = -1, kodlash = Yo'q,

xatolar = Yo'q, yangi yo'nalish = Yo'q, closefd = To'g'ri, ochuvchi = Yo'q)

BOSHQA

Windows-da, \ belgi ishlatilganligi sababli muammolar paydo bo'lishi mumkin

yo'l ajratuvchi sifatida. Python satrlari ham \ kabi ishlatiladi

qochish xarakteri. Agar sizda test deb nomlangan katalog mavjud bo'lsa va undan foydalansangiz

Agar yozuvni yozish bo'lsa : "\ test C" , Python fahmlaydi \ t a tab belgi sifatida.

Muammo vakillik qilish uchun xom iplarni ishlatib hal qilinadi

niya Windows-ning yo'llari. Satrdan oldin r ni joylashtiring :

r "C: \ sinov"





170-bet

170

19-bob I / O-fayl

Odatda, faqat dastlabki ikki yoki uchta parametrlar qiziqish uyg'otadi.

Birinchi parametr - fayl nomi - talab qilinadi. Ikkinchi pa

Parametr faylda qaysi operatsiya bajarilishini aniqlaydi (o'qish yoki

yozuv) va matnli yoki ikkilik fayl. Rejimlar ro'yxati keltirilgan

jadvalda jadvalda. 19.1.

Rejim

Ta'rif

"r"


Matn faylini o'qish (sukut bo'yicha ishlatiladi)

'w'


Matnli faylni yozish (agar fayl mavjud bo'lsa, uni qayta yozing)

'x'


Matnli faylni yozish ( FileExistsError istisno holati, agar

fayl mavjud)

'a'

Matn fayliga biriktirish (oxiriga yozish)



"rb "

Ikkilik o'qish

'wb'

Ikkilik fayl yozish (qayta yozish)



'w + b'

O'qish va yozish uchun ikkilik faylni ochish

'xb'

Ikkilik faylni yozish ( FileExistsError istisno holati, agar



fayl mavjud)

"ab"


Ikkilik faylga biriktirish (oxiriga yozish)

Anjir. 19.1. Fayl rejimlari

Ochiq funktsiyaning parametrlari haqida batafsil ma'lumot olish uchun ,

buning uchun yordam chaqiring . Ushbu xususiyat juda batafsil ma'lumotni o'z ichiga oladi

hujjatlar.

Agar siz matnli fayllar bilan ishlasangiz , odatda themode parametrida

o'tgan «r» uchun o'qib fayl yoki «V» bilan yoz . Keyingi qismida

kamida /tmp/a.txt fayli yozib olish uchun ochilgan. Python ushbu faylni yaratadi.

yoki u allaqachon mavjud bo'lsa uni almashtiring:

>>> a_file = ochish ('/ tmp / a.txt', 'w')

Qachon qaytib Fayl ob'ekt ochiq deb nomlangan turli ichiga oladi

O'qish va yozish uchun Toda. Ushbu bob eng keng tarqalgan

ishlatiladigan usullar. To'liq hujjatlar uchun

fayl ob'ekti, yordam funktsiyasini chaqirganda uni o'tkazing . Funktsiya sizga

barcha usullarning ro'yxatini saqlaydi va nima qilayotganlarini ko'rsatadi.





171-sahifa

19.2. Matnli fayllarni o'qish

171

ESLATMA

UNIX tizimlarida vaqtinchalik fayllar / tmp katalogida saqlanadi . Agar ishlasangiz

Windows-da, quyidagi buyruq bilan Temp environment o'zgaruvchisini ko'ring :

c: \> ECHO% Temp%

Odatda natija quyidagicha bo'ladi:

C: \ Foydalanuvchilar \ \ AppData \ Local \ Temp



19.2. Matnli fayllarni o'qish

Python fayllardan ma'lumotlarni o'qishning turli usullarini taqdim etadi. Ochib

faylni matn rejimida (sukut bo'yicha ishlatiladi), mumkin

unga satrlar o'qing yoki yozing. Agar fayl ikkilik shaklida bo'lsa

rejimida ( o'qish uchun "rb" , yozish uchun "wb" ), keyin siz o'qiysiz va yozasiz

bayt simlarini yuborish .

Mavjud matn faylidan bitta satrni o'qish uchun foydalaning

.readline usulidan foydalanadi . Sozlanmasa, Python birlamchi holatda bo‘ladi

matn fayllarini o'qish rejimidan foydalanadi ( r rejimi ):

>>> passwd_file = ochish ('/ etc / passwd')

>>> passwd_file.readline ()

'root: x: 0: 0: root: / root: / bin / bash'

Ehtiyot bo'ling - mavjud bo'lmagan narsalarni o'qish uchun ochishga harakat qilganda

Python fayli xato qildi:

>>> fin = ochiq ('bad_file')

Traceback (eng so'nggi qo'ng'iroq oxirgi):

...


IOError: [Errno 2] Bunday fayl yo'q yoki

katalog: 'bad_file'



MASLAHAT

Ochiq funktsiya fayl ob'ektining namunasini qaytaradi . Ushbu ob'ekt mavjud

ma'lumotlarni o'qish va yozish usullari.

Fayl ob'ektlari uchun standart o'zgaruvchan nomlar fin (fayl kiritish),

fout (fayl chiqishi), fp (fayl ko'rsatgichi - kirish yoki chiqish uchun ishlatiladi),



172-sahifa

172

19-bob I / O-fayl

yoki passwd_file kabi nomlar . Fin va fout kabi nomlar qulaydir

shunda ular o'qish yoki yozish uchun foydalanilganligini ko'rsatadi

navbati bilan

Yuqorida ko'rsatilgandek .readline usuli faylning bitta qatorini qaytaradi. Siz

har bir satrni olish uchun uni qayta-qayta chaqirishingiz mumkin yoki

o'z ichiga olgan ro'yxatni olish uchun .readlines usulidan foydalaning

barcha chiziqlar.

Bir qatorda fayl tarkibini o'qish uchun foydalaning

.qilish usuli :

>>> passwd_file = ochish ('/ etc / passwd')

>>> chop etish (passwd_file.read ())

root: x: 0: 0: root: / root: / bin / bash

bin: x: 1: 1: bin: / bin: / bin / noto'g'ri

demon: x: 2: 2: daemon: / sbin: / bin / false

adm: x: 3: 4: adm: / var / adm: / bin / noto'g'ri

Ular bilan ishlashni tugatgandan so'ng har doim fayllarni yoping; Buning uchun

.close usulini chaqiring :

>>> passwd_file.close ()

Ko'rib turganingizdek, faylni yopish oson. Birozdan keyin siz qo'shiq aytasiz

Nega bu juda muhim?



19.3. Ikkilik fayllarni o'qish

Ikkilik fayldan ma'lumotlarni o'qish uchun themode stro-

ku 'rb' ( Ikkilikni o'qing). Ikkilik fayldan ma'lumotlarni o'qiyotganda, siz

Siz oddiy satrlarni emas, balki baytlarni o'qiysiz . Xavotir olmang interfeysi

bayt satrlari bilan ishlash ish interfeysiga juda o'xshash

oddiy chiziqlar bilan. Quyida PNG faylining dastlabki 8 baytlari keltirilgan.

8 baytni o'qish uchun 8 qiymatini .read usuliga o'tkazing :

>>> bfin = ochish ('img /ict.png', 'rb')

>>> bfin.read (8)

b '\ x89PNG \ r \ n \ x1a \ n'





173-sahifa

19.4. Fayllarni qidirish

173

Chiziq boshida b ga e'tibor bering - bu bayt chizig'ining belgisidir.

Siz ikkilik faylda .readline- ga qo'ng'iroq qilishingiz mumkin ; usul bo'ladi

b '\ n' ga yetguncha ma'lumotlarni o'qing . Ikkilik taqqoslash

va oddiy chiziqlar quyidagi boblardan birida taqdim etiladi.

19.4. Fayllarni qidirish

Satrlarni sanab chiqish avval aytib o'tilgan edi. Pythonda

Siz faylning satrlarida osongina iteratsiya qilishingiz mumkin. Bilan ishlashda

bir to'p fayl bilan, Siz dan foydalanayotgan qidirish mumkin .readlines usuli uchun

qatorlarni birma-bir olish uchun:

>>> fin = ochiq ('/ etc / passwd')

>>> fin.readlines liniyalari uchun ():

... bosib chiqarish

Ammo .readlines ro'yxatni qaytarganligi sababli Python o'qishi kerak bo'ladi

butun ro'yxat yaratish uchun fayl, va bu muammolarni keltirib chiqarishi mumkin. Agar,

Aytaylik, fayl serverdagi jurnal yozuvlarini o'z ichiga olgan bo'lishi mumkin

barcha bepul xotirada yurish. Biroq, Python-da bunday holatlar mavjud

bitta hiyla-nayrang mavjud: Python imkon beradigan fayllar satrida takrorlanish

fayl misolida iteratsiya. To'g'ridan-to'g'ri fayl orqali qidirishda

Python oldindan ishlamaydi va matn satrlarini faqat tomonidan o'qiydi

zarur bo'lganda:

>>> fin = ochiq ('/ etc / passwd')

>>> fin ichida chiziq uchun:

... bosib chiqarish

Fayl misolida qanday iteratsiya qilinadi? Python bor

O'ziga xoslikni belgilaydigan maxsus .__ iter__ usuli mavjud

misol bo'yicha izlash. Fayl sinf uchun, .__ iter__ usuli iterasyon ustidan

fayl satrlari.

.Readlines metodidan faqat agar foydalanish kerak bo'lsa

Fayl xotiraga mos keladi va siz bog'lanishingiz kerak

chiziqlarga bir necha bor takrorlang. Aks holda to'g'ridan-to'g'ri fayllarni qidirish

afzal ko'riladi.



174-bet

174

19-bob I / O-fayl



19.5. Fayllarni yozib olish

Faylga ma'lumot yozish uchun avval faylni ichkarida ochishingiz kerak

dastgoh matbuot yozuvi . Agar siz "w" rejimini tanlasangiz , fayl yozib olish uchun ochiq bo'ladi

matnli ma'lumotlar:

>>> fout = ochiq ('/ tmp / names.txt', 'w')

>>> fout.write ('Jorj')

Agar bu qo'ng'iroq bo'lsa /tmp/names.txt faylini qayta yozishga harakat qiladi

agar u mavjud bo'lsa; aks holda fayl yaratiladi. Agar yo'q bo'lsa

faylga kirish uchun ruxsatlar mavjud bo'lsa, Ruxsat xatosi bekor qilinadi .

Agar yo'l noto'g'ri bo'lsa, siz FileNotFoundError xatosi olasiz .

Faylga ma'lumotlarni joylashtirish uchun ikkita usul ishlatiladi - .write

va .writelines . .Write usuli parametrda satrni oladi va yozadi

ma'lumotlarni faylga. .Writlines usuli ketma-ketlikni oladi

ma'lumotlar va faylga yozadi.



ESLATMA

Faylga yangi qator belgilarini qo'shish uchun siz aniq belgilashingiz kerak

ularga fayl usullarini bering. UNIX platformalarida satrlar o'tdi

.write \ n birikmasi bilan tugashi kerak . Xuddi shunday

.tashqi satrlar orqali uzatiladigan ketma-ketlik chiziqlari ham bo'lishi kerak

oxirigacha \ n . Windows-da yangi chiziq paydo bo'ladi

bating \ r \ n .

Agar xoch-platforma kodi, yozish mumkin, shuning uchun linesep liniyasi moduli

os platforma uchun to'g'ri chiziq birikmasini aniqlaydi:

>>> import os

>>> os.linesep # UNIX platformasi

'\ n'


MASLAHAT

Agar siz yuqoridagi misolni tarjimonda sinab ko'rgan bo'lsangiz, ehtimol

Siz buyurganingizga qaramay /tmp/names.txt fayli bo'sh qolganligini payqadingiz

Python unga "Jorj" ismini yozadi. Nima sodir bo `LDI?





175-sahifa

19.6. Fayl yopilmoqda

175

Fayl chiqishi operatsion tizim tomonidan buferlanadi . Optimallashtirish uchun

saqlash vositalarida yozuvlar, operatsion tizim yozuvlari

ma'lumotlar faqat ma'lum bir chegaraga yetganda. Linux tizimlarida bu

cheklov odatda 4 KB ni tashkil qiladi.

Ma'lumot yozishni majburlash uchun .flush usuliga qo'ng'iroq qiling ,

bu saqlanmagan ma'lumotlarni saqlash vositasiga tashlaydi.

Ma'lumotlar yozilishini ta'minlash uchun yanada radikal mexanizm,

.close usuliga qo'ng'iroq asosida . Ushbu usulni chaqirish Pythonga buni aytadi

tugallangan faylga yozish:

>>> fout2 = ochish ('/ tmp / names2.txt',

...


'w')

>>> fout2.write ('Jon \ n')

>>> fout2.close ()

19.6. Fayl yopilmoqda

Yuqorida aytib o'tilganidek, .close qo'ng'irog'i fayl buferini yozadi

saqlash muhiti. Python qoidalari har doim faylni yopishingizni talab qiladi.

ular bilan ishlash tugagandan so'ng (o'qish uchun ham, yozishda ham).

Fayllar aniq yopilishi kerak bo'lgan bir qator sabablar mavjud.

dasturlarda:

❍ Agar fayl global o'zgaruvchida saqlansa, u hech qachon bo'lmaydi

dasturni bajarish paytida avtomatik ravishda yopiladi.

❍ cPython fayllar yo'q qilingan taqdirda avtomatik ravishda yopiladi

axlat yig'ish paytida. Boshqa Python dasturlari bajarilmasligi mumkin

po'stloq

❍ qo'ng'iroq qilmasdan .ushbu ma'lumotingiz qachon yozilishini bilmayapsiz.

❍ Ehtimol, operatsion tizimingizda cheklovlar mavjud

har bir jarayon uchun ochiq fayllar soni.

❍ Ba'zi operatsion tizimlar ochiq-oydin o'chirishga imkon bermaydi

fayl.




176-bet

176

19-bob I / O-fayl

Python odatda axlat yig'ish bilan shug'ullanadi va dasturchi buni qilmaydi

ob'ektlarni yo'q qilish haqida tashvishga tushadi. Ochish operatsiyalari

va fayllarni yopish - istisnolar. Python avtomatik ravishda

fayl ob'ekti doiradan chiqib ketganda faylni yopadi. Muallif:

Bu holda siz axlat yig'ishga ishonmasligingiz kerak. Aniq

niyatlaringizni yig'ib oling va o'zingizdan keyin tozalang - yopishingizga ishonch hosil qiling

fayllar!

Python 2.5 buyrug'i bilan tanishtirdi . Birgalikda ishlatiladi

bilan kontekst rahbarlari sodir sharoitlarni nazorat qilish uchun

blok bajarilishidan oldin va keyin. Ochiq funktsiya menejer sifatida ham xizmat qiladi.

kirishdan oldin fayl ochilishini ta'minlash uchun kontekst

blokga kiradi va blokdan chiqqandan keyin yopiladi. Masalan:

>>> ochiq ('/ tmp / names3.txt', 'w') bilan fout3 sifatida:

... fout3.write ('Ringo \ n')

Ushbu parcha quyidagiga teng keladi:

>>> fout3 = ochish ('/ tmp / names3.txt', 'w')

>>> fout3.write ('Ringo \ n')

>>> fout3.close ()

E'tibor bering, ikkita nuqta bilan kesilgan qator . Kog-

Ha, Python kodining satri ikkala nuqta bilan tugaydi, keyingi kod har doim bo'ladi

yozilgan. Yo'g'on ichakdan keyin ajratilgan kod chaqiriladi

kontekst menejerining bloki yoki tanasi tomonidan amalga oshiriladi . Quyidagi misolda

blok faylga Ringo matnini yozish operatsiyasidan iborat . Ushbu blokdan keyin

tugaydi. Yuqoridagi misolda, bu ko'rinmaydi, ammo tugallangandan keyin

Bilan blokda kodeksining kesmada tomonidan hukm qilinishi mumkin. Unda

kontekst menejeri kuchga kiradi va mantiqni bajaradi

Chiqish. Fayl konteksti menejeri mantiqiy buyruqlardan chiqish

Blok tugashi bilan Python avtomatik ravishda faylni o'chiradi.



MASLAHAT

Foydalaning bilan tuzilishga o'qish va yozish fayllar uchun. Yopish

fayllar yaxshi odat bo'lib qoladi va agar siz ish paytida buyruq bilan ishlatsangiz

fayllari bo'lganlar uchun, siz ularni yopishdan qo'rqmaysiz. bilan amri

avtomatik ravishda siz uchun faylni yopadi.



177-sahifa


Download 363.98 Kb.

Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   ...   21




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling