1-sahifa 2-sahifa
Download 363.98 Kb.
|
Python
- Bu sahifa navigatsiya:
- 18.3. Dilimlarni oshirish
- 167-bet 18.3. Dilimlarni oshirish 167
- 169-bet 19 I / O operatsiyalari fayllar bilan
- Rejim Tarif
- 171-sahifa 19.2. Matnli fayllarni oqish 171 ESLATMA
- 19.2. Matnli fayllarni oqish
- 172-sahifa 172
- 19.3. Ikkilik fayllarni oqish
- 173-sahifa 19.4. Fayllarni qidirish 173
- 19.4. Fayllarni qidirish
- 175-sahifa 19.6. Fayl yopilmoqda 175
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 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']
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:
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 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.
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.
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)
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 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.
"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.
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 \ 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
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 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'
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.
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 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?
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 ()
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 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.
Download 363.98 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling