Bu kılavuzda, Python sürüm 3'ü kullanacağız. Çoğu sistem Python 2.7 ile önceden yüklenmiş olarak gelir. Python 2.7, çoğu eski kodda kullanılırken, Python 3, Python dilinin bugünü ve geleceğidir. Eski Python kodunu yazmak veya desteklemek için belirli bir nedeniniz yoksa, Python 3'te çalışmanızı öneririz.
Microsoft Windows için Python3, //www.python.org adresinden indirilebilir. Yüklerken, aşağıdaki resimde gösterildiği gibi "Tüm kullanıcılar için başlatıcıyı yükle" ve "PATH'e Python Ekle" seçeneklerinin işaretli olduğundan emin olun.
Linux'ta Python 3'ü paket yöneticinizle kurabilirsiniz. Örneğin, Debian veya Ubuntu'da, şu komutu kullanarak yükleyebilirsiniz:
sudo apt-get güncelleme && sudo apt-get install yükleme python3
MacOS için, Python 3 yükleyici, yukarıda belirtildiği gibi python.org adresinden indirilebilir. Homebrew paket yöneticisini kullanıyorsanız, bir terminal penceresi ( Uygulamalar → Yardımcı Programlar ) açılarak ve bu komutu çalıştırarak da kurulabilir:
demlemek python3 yüklemek
Python Koşu
Linux ve macOS'ta Python 3 tercümanını çalıştırma komutu python3'tür . Windows'da, başlatıcıyı yüklediyseniz, komut py'dir . Bu sayfadaki komutlar python3 ; Windows kullanıyorsanız, tüm komutlarda python3 yerine py yazınız .
Python'u hiçbir seçenek olmadan çalıştırmak etkileşimli tercümanı başlatacaktır. Tercümanı kullanma hakkında daha fazla bilgi için, bkz. Python'a genel bakış: Python yorumlayıcısını kullanma. Yorumlayıcıya yanlışlıkla girerseniz, exit () veya quit () komutunu kullanarak komuttan çıkabilirsiniz .
Python'u bir dosya adı ile çalıştırmak, bu python programını yorumlayacaktır. Örneğin:
python3 program.py
... program.py dosyasında bulunan programı çalıştırır .
Tamam, Python'u bir metin dosyasından metin çıkarmak için nasıl kullanabiliriz?
Metin dosyasından veri okuma
İlk önce bir metin dosyasını okuyalım. Diyelim ki birkaç satır Latince içeren lorem.txt adlı bir dosyayla çalışıyoruz:
Lorem ipsum dolor amet sitet, mütevazi elit.Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş.Honissim lacus'ta quisque.
Not: Aşağıdaki tüm örneklerde, bu dosyada yer alan metinlerle çalışıyoruz. Yukarıdaki latin metni bir metin dosyasına kopyalayıp yapıştırmaktan çekinmeyin ve bu dosyayı giriş olarak kullanarak örnek kodu çalıştırabilmeniz için lorem.txt olarak kaydedin.
Bir Python programı, yerleşik open () işlevini kullanarak bir metin dosyasını okuyabilir. Örneğin, aşağıda metin modunda okumak için lorem.txt dosyasını açan, içeriği içerik adındaki bir dize değişkenine okuyan, dosyayı kapatan ve verileri yazdıran bir Python 3 programı bulunmaktadır.
myfile = open ("lorem.txt", "rt") # metin içeriğini okumak için lorem.txt açın = myfile.read () # tüm dosyayı bir dizgede okuyun myfile.close () # dosyayı yazdırın (içerik) # içerik yazdır
Burada, dosyam dosya dizinimize verdiğimiz addır.
Open () işlevindeki " rt " parametresi "Bu dosyayı harici verileri okumak için açıyoruz" anlamına gelir.
Karma işareti (" # "), bu satırın geri kalan kısmındaki her şeyin bir yorum olduğu ve Python yorumlayıcısı tarafından yok sayıldığı anlamına gelir.
Bu programı read.py adlı bir dosyaya kaydederseniz, aşağıdaki komutu kullanarak çalıştırabilirsiniz.
python3 read.py
Yukarıdaki komut lorem.txt içeriğini verir :
Lorem ipsum dolor amet sitet, mütevazi elit.Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş.Honissim lacus'ta quisque.
"Açık" kullanarak
Açık dosyalarınızı en kısa sürede kapatmak önemlidir: dosyayı açın, işleminizi gerçekleştirin ve kapatın. Uzun süre açık bırakmayın.
Dosyalarla çalışırken, open ile ... bileşik deyimi olarak kullanmak iyi bir uygulamadır. Bir dosyayı açmanın, üzerinde çalışmanın ve dosyayı kapatmanın en kolay yolu, hepsi kolay okunur bir kod bloğundadır. Kod bloğu tamamlandığında dosya otomatik olarak kapanır.
Open ... as kullanarak, programımızı şöyle yazabiliriz:
myfile olarak open ('lorem.txt', 'rt') ile: # Metin içeriğini okumak için lorem.txt'yi açın = myfile.read () # Tüm dizeyi yazdırın (content) # Dizeyi yazdırın
Not: Girinti Python'da önemlidir. Python programları, bir kod bloğu gibi kapsam tanımlamak için satırın başında beyaz boşluk kullanır. Girinti seviyesi başına dört boşluk kullanmanız ve sekmeler yerine boşluk kullanmanız önerilir. Aşağıdaki örneklerde, kodunuzun tam olarak burada belirtildiği gibi girintili olduğundan emin olun.
Programı read.py olarak kaydedin ve yürütün:
python3 read.py
Çıktı
Lorem ipsum dolor amet sitet, mütevazi elit.Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş.Honissim lacus'ta quisque.
Metin dosyalarını satır satır okuma
Şimdiye kadarki örneklerde, bir kerede tüm dosyayı okuyorduk. Dolu bir dosyayı okumak, küçük dosyalar için önemli değildir, ancak genel olarak konuşursak, bu iyi bir fikir değildir. Birincisi, dosyanız mevcut hafıza miktarından büyükse, bir hatayla karşılaşırsınız.
Neredeyse her durumda, bir metin dosyasını bir defada bir satır okumak daha iyi bir fikirdir.
Python'da, dosya nesnesi bir yineleyicidir. Bir yineleyici, tekrar tekrar çalıştırıldığında belirli şekillerde davranan bir Python nesnesi türüdür. Örneğin, bir dosya nesnesini tekrar tekrar çalıştırmak için for döngüsünü kullanabilirsiniz ve aynı işlem her gerçekleştirildiğinde farklı veya "sonraki" bir sonuç alırsınız.
Metin dosyaları için, dosya nesnesi her seferinde bir satır metin yinelemektedir. Metnin bir satırını veri "birimi" olarak kabul eder, bu nedenle her seferinde bir satırda yineleme yapmak için for ... in loop deyimini kullanabiliriz:
myfile olarak open ('lorem.txt', 'rt') ile: # myfile içindeki myline metnini okumak için lorem.txt dosyasını açın: # Her satır için, bir dizgede yazdırın (myline) # bu dizeyi yazdırın, tekrarlayın
Çıktı
Lorem ipsum dolor amet sitect, adipiscing seçkin müttefiki elleriyle. Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş. Honissim lacus'ta quisque.
Her satırdan sonra ek bir satır sonu ("yeni satır") alacağımıza dikkat edin. Çünkü iki yeni satır yazdırılıyor. İlki, metin dosyamızın her satırının sonundaki yeni satırdır. İkinci yeni satır, varsayılan olarak, print (), yazdırmasını istediklerinizin sonuna bir satır sonu eklemesi nedeniyle oluşur.
Metin satırlarımızı bir değişkende - özellikle bir liste değişkeni - içinde daha yakından inceleyelim.
Metin verilerini liste değişkeninde saklamak
Python'da listeler, C veya Java'daki bir diziye benzer ancak aynı değildir. Bir Python listesi, değişken uzunluklarda ve türlerde indekslenmiş veriler içerir.
mylines = [] # mylines adlı boş bir liste bildirin. myfile olarak open ('lorem.txt', 'rt') ile: # Metin verilerini okumak için lorem.txt dosyasını açın. myfile'daki myline için: # Her satır için, myline olarak depolanan, mylines.append (myline) #, içeriklerini mulinlere ekleyin. print (mylines) # Listeyi yazdır.
Bu programın çıktısı biraz farklı. Listenin içeriğini yazdırmak yerine bu program liste nesnemizi şöyle yazdırır:
Çıktı
['Lorem ipsum dolor amet sitet, adipiscing seçkin el işleri ustası. Nunc fringilla arcu kongue metus aliquam mollis. \ N ', ' Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş. Praesent sed rhoncus eo. Duis id commodo orci. \ N ', ' Onur lacus'ta quisque. \ N ']
Burada, listenin ham içeriğini görüyoruz. Ham nesne biçiminde, bir liste virgülle ayrılmış bir liste olarak gösterilir. Burada, her öğe bir dize olarak temsil edilir ve her yeni satır, kaçış karakteri dizisi olarak gösterilir, \ n .
C veya Java'daki bir dizi gibi, değişken adından sonra bir dizin numarası belirterek bir listenin öğelerine parantez içinde erişebiliriz. İndeks sayıları sıfırdan başlar - başka bir deyişle, bir listenin n .
Not: Dizin numaralarının neden bir yerine sıfırdan başladığını merak ediyorsanız, yalnız değilsiniz. Bilgisayar bilimcileri, sıfır tabanlı numaralandırma sistemlerinin geçmişte yararlılığını tartışmışlardır. 1982'de, Edsger Dijkstra, bilgisayar bilimlerinde verileri endekslemenin en iyi yolunun neden sıfır tabanlı numaralandırmanın açıkladığını açıklayarak konuyla ilgili görüşünü verdi. Notu kendiniz okuyabilirsiniz - zorlayıcı bir tartışma yapar.
Listenin adından sonra parantez içinde bulunan 0 dizin numarasını belirterek ilk satır öğesini yazdırabiliriz:
baskı (mylines [0])
Çıktı
Lorem ipsum dolor amet sitect, adipiscing seçkin müttefiki elleriyle. Nunc fringilla arcu kongue metus aliquam mollis.
Veya üçüncü satır, dizin numarası 2'yi belirterek:
baskı (mylines [2])
Çıktı
Honissim lacus'ta quisque.
Ancak, değeri olmayan bir dizine erişmeye çalışırsak, hata alırız:
baskı (mylines [3])
Çıktı
Geri izleme (son aramaların sonuncusu): Dosya, satır, yazdırılmakta (mylines [3]) IndexError: endeks aralık dışı
Bir liste nesnesi bir yineleyicidir, bu nedenle listenin her öğesini yazdırmak için ... içinde bununla yineleyebiliriz:
mylines = [] # myfile olarak open ('lorem.txt', 'rt') ile boş bir liste bildirin: # Metin okumak için lorem.txt açın. myfile içindeki satır için: # Metnin her satırı için, mylines.append (line) # bu satırı listeye ekleyin. mylines içindeki element için: # Listedeki her element için, print (element) # yazdırın.
Çıktı
Lorem ipsum dolor amet sitect, adipiscing seçkin müttefiki elleriyle. Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş. Honissim lacus'ta quisque.
Ama biz hala fazladan yeni hat alıyoruz. Metin dosyamızın her satırı, yazdırılmakta olan yeni bir satır karakteriyle (' \ n ') bitiyor. Ayrıca, her satırı yazdırdıktan sonra print (), aksi belirtilmedikçe, kendi satırına yeni bir satır ekler.
Print () çağrımızda bir son parametre belirterek bu varsayılan davranışı değiştirebiliriz:
print (element, end = '')
Sonu boş bir dizeye ayarlayarak (aralarında boşluk olmayan iki tek tırnak işareti olarak temsil edilir), print () ' e yeni satır karakteri yerine satırın sonunda hiçbir şey yazdırmamasını söyleriz.
Gözden geçirilmiş programımız şuna benziyor:
mylines = [] # myfile olarak açık ('lorem.txt', 'rt') olan boş bir liste bildirin: # myfile içindeki metni okumak için lorem.txt dosyasını açın: # Her metin satırı için mylines.append ( satır) # bu satırı listeye ekleyin. mylines içindeki element için: # Listedeki her element için, print (element , end = '' ) # # fazladan yeni satır olmadan yazdır.
Çıktı
Lorem ipsum dolor amet sitet, mütevazi elit.Mauris nec maximus purus. Maecenas aret pretium tellus'a oturmuş.Honissim lacus'ta quisque.
Burada gördüğünüz newlines aslında dosyada; her satırın sonunda özel bir karakter (' \ n '). Bunlardan kurtulmak istiyoruz, bu yüzden dosyayı işlerken onlar için endişelenmek zorunda kalmayacağız.
Newlines nasıl çıkarılır?
Yeni satırları tamamen kaldırmak için onları soyabiliriz. Bir dizgiyi çıkarmak, dizgenin başından veya sonundan bir veya daha fazla karakteri, genellikle boşluku kaldırmaktır.
İpucu: Bu işleme bazen "düzeltme" de denir.
Python 3 string nesneleri rstrip () adında ve karakterleri dizgenin sağ tarafından soyan bir metoda sahiptir. İngilizce dili soldan sağa okur, bu yüzden sağdan sıyrılmak karakterleri baştan kaldırır.
Değişken mystring olarak adlandırılmışsa, sağ tarafını mystring.rstrip ( chars ) ile sorabiliriz ; burada chars, dizgenin sağ tarafındaysa, şeritlenecek karakter dizisidir. Örneğin, "123abc" .rstrip ("bc"), 123a'yı döndürür.
İpucu: Programınızdaki bir dizgeyi değişmez içeriği ile temsil ettiğinizde, buna dizgenin değişmezi denir. Python'da (çoğu programlama dilinde olduğu gibi), dize değişmezleri her zaman alıntılanır - her iki tarafa da tek (') veya çift (") tırnak işaretleri eklenir. Python'da, tek ve çift tırnaklar eşittir; birini veya diğerini kullanabilirsiniz, dizenin her iki ucunda eşleştikleri sürece.İnsan tarafından okunabilir bir dizeyi ( Hello gibi) çift tırnak ( "Merhaba" ) olarak görüntülemek geleneksel bir yöntemdir, tek bir karakteri ( b gibi) temsil ediyorsanız, ya da yeni satır karakteri gibi tek bir özel karakter ( \ n ), tekli tırnak kullanmak gelenekseldir ( 'b', '\ n' ) Python'da dizelerin nasıl kullanılacağı hakkında daha fazla bilgi için dizelerin belgelerini okuyabilirsiniz. Python'da.
Deyim dizesi .rstrip ('\ n') dizgenin sağ tarafından yeni bir satır karakteri atar . Programımızın aşağıdaki sürümü, her satır metin dosyasından okunduğunda yeni satırları çıkarır:
mylines = [] # Boş bir liste yapın. myfile olarak open ('lorem.txt', 'rt') ile: # Metin okumak için lorem.txt'yi açın. myfile'daki myline için: # Dosyadaki her satır için, mylines.append (myline.rstrip ('\ n')) # # newline'ı soyun ve listeye ekleyin. mylines içindeki element için: # Listedeki her element için, print (element) # yazdırın.
Metin şimdi bir liste değişkeninde saklanır, böylece tek tek satırlara dizin numarasına göre erişilebilir. Newlines soyuldu, bu yüzden onlar için endişelenmek zorunda değiliz. Dosyayı yeniden yapılandırıp diske yazarsak, bunları daha sonra her zaman geri koyabiliriz.
Şimdi belirli bir alt dize için listedeki satırları arayalım.
Diyelim ki, belirli bir cümlenin her oluşumunu, hatta tek bir harfi bulmak istiyoruz. Örneğin, belki de her "e" nin nerede olduğunu bilmemiz gerekir. Bunu string'in find () metodunu kullanarak başarabiliriz.
Liste, metimizin her satırını bir dize nesnesi olarak saklar. Tüm dize nesneleri, dizede bir alt dizenin ilk oluşumunu bulan bir find () yöntemine sahiptir.
Liste dosyalarında depolanan metin dosyamızın ilk satırında "e" harfini bulmak için find () yöntemini kullanalım . Metillerin ilk elemanı, metin dosyasının ilk satırını içeren bir dize nesnesidir. Bu dize nesnesinin bir find () yöntemi vardır.
Find () ' nin parantezlerinde parametreleri belirtiriz. Gerekli olan ilk ve tek parametre "e" nin aranacağı dizedir. Açıklama ifadeleri [0] .find ("e"), tercümana dizenin başlangıcında başlamasını ve "e" harfini bulana kadar her seferinde bir karakter aramasını söyler. Bir tane bulduğunda, aramayı durdurur ve "e" nin bulunduğu dizin numarasını döndürür. Dizenin sonuna ulaşırsa, hiçbir şey bulunmadığını göstermek için -1 döndürür.
baskı (mylines [0] .find ( "e" için))
Çıktı
3
"3" dönüş değeri bize "e" harfinin dördüncü karakter olduğunu, "Lorem" deki "e" olduğunu söyler. (Dizinin sıfır temelli olduğunu unutmayın: dizin 0 ilk karakter, 1 saniye, vb.)
Find () yöntemi isteğe bağlı iki ek parametre alır: aramanın dizede nerede başlayıp bitmesi gerektiğini belirten bir başlangıç dizini ve bir durdurma dizini. Örneğin, .find ("abc", 10, 20) dizgisi "abc" alt dizisini arayacaktır, ancak yalnızca 11. ile 21. karakter arasında olacaktır. Dur belirtilmezse, find () dizin başlangıcında başlar ve dizenin sonunda durur.
Örneğin, aşağıdaki ifade beşinci karakterden başlayarak [0] adlı metindeki "e" yi arar.
yazdırma (metinler [0]. bul ("e", 4))
Çıktı
24
Başka bir deyişle, [0] satırındaki 5. karakterden başlayarak ilk "e", endeks 24'te bulunur ("nec" deki "e").
10 dizininde aramaya başlamak ve 30 dizininde durmak için:
yazdırma (metiller [1]. bul ("e", 10, 30))
Çıktı
28
("Maecenas" daki ilk "e").
Find () alt dizgiyi arama aralığında bulamazsa, -1 sayısını döndürerek başarısızlığa işaret eder:
yazdırma (metinler [0]. bul ("e", 25, 30))
Çıktı
-1
25 ve 30 endeksleri arasında "e" oluşumu görülmedi.
Bir alt tablonun tüm oluşumlarını bulma
Peki ya bir ilkenin ortaya çıktığını bulmak istiyorsak, sadece karşılaştığımız ilkini değil? Önceki eşleşmenin dizininden başlayarak dizgiyi yineleyebiliriz.
Bu örnekte, "e" harfini tekrar tekrar bulmak için bir while döngüsü kullanacağız. Bir olay bulunduğunda, dizedeki yeni bir konumdan başlayarak find'i tekrar ararız. Spesifik olarak, son olayın yeri, artı dizenin uzunluğu (böylece sonuncuyu geçebiliriz). Bulgusu -1 döndürürse veya başlangıç dizesi dizginin uzunluğunu aşarsa, dururuz.
# Yukarıda gösterildiği gibi minesinler oluşturun. = [] # Boş bir liste yapın. myfile olarak open ('lorem.txt', 'rt') ile: # Metin okumak için lorem.txt'yi açın. myfile'daki myline için: # Dosyadaki her satır için, mylines.append (myline.rstrip ('\ n')) # # newline'ı soyun ve listeye ekleyin. # "E" harfinin tüm örneklerini bulun ve yazdırın index = 0 # current index prev = 0 # önceki index str = mylines [0] # aranacak dize (milinlerin ilk elemanı) substr = "e" # substring aranacak index = len (str)) yazdırılırken ('\ n' + str); # E'nin altındaki orijinal dizeyi yazdır
Çıktı
eeeee Lorem ipsum dolor amet sitet, adipiscing seçkin el işleri ustası. ee Nunc fringilla arcu kongue metus aliquam mollis.
Düzenli ifadeler içeren
Karmaşık aramalar için normal ifadeler kullanmalısınız.
Python normal ifadeler modülü re olarak adlandırılır. Programınızda kullanmak için, kullanmadan önce modülü içe aktarın :
yeniden ithal
Re modülü, bir arama desenini desen nesnesine derleyerek düzenli ifadeler uygular. Bu nesnenin yöntemleri daha sonra eşleşme işlemlerini gerçekleştirmek için kullanılabilir.
Örneğin, belgenizde d harfi ile başlayan ve r harfi ile biten herhangi bir kelimeyi aramak istediğinizi varsayalım . Bunu " \ bd \ w * r \ b " normal ifadesini kullanarak başarabiliriz. Ne anlama geliyor?
karakter dizisi | anlam |
---|---|
\ b | Kelime sınırı, boş bir dize ile eşleşir (hiçbir şey dahil hiçbir şey), ancak yalnızca sözcük olmayan bir karakterden önce veya sonra görünürse. "Kelime karakterleri" 0 - 9 rakamları, küçük harf ve büyük harf veya bir alt çizgidir (" _ "). |
d | Küçük harf d . |
\ w * | w, herhangi bir sözcük karakterini temsil eder ve *, "önceki karakterden sıfır veya daha fazla" anlamına gelen bir niceleyicidir. Öyleyse \ w *, sıfır veya daha fazla kelime karakteriyle eşleşir. |
r | Küçük harf r . |
\ b | Kelime sınırı. |
Dolayısıyla bu normal ifade, "bir sözcük sınırı, daha sonra küçük harf 'd', sonra sıfır veya daha fazla sözcük karakteri, daha sonra küçük harf" r ", sonra bir sözcük sınırı" olarak tanımlanabilecek herhangi bir dize ile eşleşecektir. Bu şekilde tarif edilebilecek dizeler, destroyer, dour ve doktor kelimelerini ve dr kısaltmasını içerir.
Bu normal ifadeyi Python arama işlemlerinde kullanmak için önce onu bir kalıp nesnesine derleriz. Örneğin, aşağıdaki Python ifadesi, normal ifadeyi kullanarak arama yapmak için kullanabileceğimiz, pattern adında bir pattern nesnesi oluşturur.
pattern = re.compile (r "\ bd \ w * r \ b")
Not: Yukarıdaki ifadedeki dizgemizden önceki r harfi önemlidir. Python'a, dizimizi aynen yazdığımız gibi, ham dizge olarak yorumlamasını söyler. Eğer dizeyi bir r ile ön eklememiş olsaydık, Python \ b gibi kaçış dizilerini başka şekillerde yorumlardı. Dizelerinizi tam anlamıyla yorumlamak için Python'a ihtiyacınız olduğunda, onu r ile ön ekleyerek ham dizge olarak belirtin.
Şimdi, kalıp nesnesinin search () gibi yöntemlerini kullanarak derlenmiş düzenli ifadeler için bir dizgi arayarak eşleşmeyi arayabiliriz. Bir tane bulursa, eşleme nesnesi adı verilen özel bir sonuç döndürür. Aksi takdirde, "false" boolean değeri gibi kullanılan yerleşik bir Python sabiti None döndürür.
Örnek
import re str = "Günaydın doktor." pat = re.compile (r "\ bd \ w * r \ b") # derleme regex "\ bd \ w * r \ b" bir kalıp nesnesine pat.search (str)! = Yok: # Arayın Desen. Eğer bulunursa, yazdırın ("Bulundu.")
Çıktı
Buldum
Büyük / küçük harf duyarlı bir arama yapmak için derleme adımında re.IGNORECASE özel sabitini belirleyebilirsiniz:
import re str = "Merhaba, Doktor." pat = re.compile (r "\ bd \ w * r \ b", re.IGNORECASE) # pat.search (str)! = Yok: yazdır ("Bulundu.")
Çıktı
Buldum
Hepsini bir araya koy
Şimdi bir dosyayı nasıl açacağımızı, satırları bir listeye nasıl okuyacağımızı ve o listenin herhangi bir elemanında bir alt dizini nasıl bulacağımızı biliyoruz. Bu bilgiyi bazı örnek programlar oluşturmak için kullanalım.
Alt dize içeren tüm satırları yazdır
Aşağıdaki program satır satır bir günlük dosyası okur. Satır "hata" kelimesini içeriyorsa, hata adı verilen bir listeye eklenir. Aksi takdirde göz ardı edilir. Lower () string yöntemi karşılaştırma amacıyla tüm karakter dizilerini küçük harfe dönüştürür ve orijinal dizeleri değiştirmeden arama büyük / küçük harfe duyarsız hale gelir.
Find () yönteminin doğrudan alt () yönteminin sonucu olarak çağrıldığını unutmayın; buna yöntem zincirleme denir. Ayrıca, print () ifadesinde, birkaç dizgiyi + işleci ile birleştirerek bir çıktı dizisi oluşturduğumuza dikkat edin.
errors = [] # Sonuçları saklayacağımız liste. linenum = 0 substr = "error" .lower () # Aranacak alt öğe. myfile olarak open ('logfile.txt', 'rt') ile: myfile'deki satır için: linenum + = 1 eğer line.lower (). find (substr)! = -1: # eğer büyük / küçük harf duyarlı değilse, hatalar. hatalarda hata için ("Line" + str (linenum) + ":" + "line.rstrip ('\ n')) ekleyin: print (err)
Çıktı
Satır 6: Mar 28 09:10:37 Hata: sunucuyla bağlantı kurulamıyor. Bağlantı reddedildi. Satır 10: Mar 28 10:28:15 Çekirdek hatası: Belirtilen konum bağlı değil. Satır 14: Mar 28 11:06:30 HATA: usb 1-1: config ayarından çıkamıyor.
Regex kullanarak alt dize içeren tüm satırları ayıklayın.
Aşağıdaki program yukarıdaki programa benzer, ancak normal ifadeler modülünü kullanır. Hatalar ve satır numaraları, örneğin (linenum, satır), kayıtlar şeklinde saklanır. Devir, error.append () deyimindeki ek parantez içindeki parantezler tarafından oluşturulur. Tuple öğelerine, listeye benzer şekilde, parantez içinde sıfır temelli bir dizin verilir. Burada inşa edildiği gibi, err [0] bir linenyumdur ve err [1] bir hata içeren birleşik çizgidir.
import re errors = [] linenum = 0 pattern = re.compile ("error", re.IGNORECASE) # myfile olarak open ('logfile.txt', 'rt') ile küçük harfe duyarlı olmayan bir regex derleyin: myfile içindeki satır için : linenum + = 1 eğer pattern.search (line)! = Yok: # Eğer bir eşleşme bulunursa, hatalardaki hata için error.append ((linenum, line.rstrip ('\ n')))): # Listede tekrar sırala ("Line" + str (hata [0]) + ":" + hata [1])
Çıktı (yukarıdaki ile aynı)
Satır 6: Mar 28 09:10:37 Hata: sunucuyla bağlantı kurulamıyor. Bağlantı reddedildi. Satır 10: Mar 28 10:28:15 Çekirdek hatası: Belirtilen konum bağlı değil. Satır 14: Mar 28 11:06:30 HATA: usb 1-1: config ayarından çıkamıyor.
Telefon numarası içeren tüm satırları al
Aşağıdaki program, bir ABD veya uluslararası telefon numarası içeren info.txt adlı bir metin dosyasının satırını yazdırır. Bunu " (\ + \ d {1, 2})? [\ S .-]? \ D {3} [\ s .-]? \ D {4} " normal ifadesiyle gerçekleştirir. Bu regex, aşağıdaki telefon numarası notasyonlarına uygundur:
- 123-456-7890
- (123) 456-7890
- 123 456 7890
- 123.456.7890
- +91 (123) 456-7890
yeniden içe aktarma hataları = [] linenum = 0 desen = yeniden derleme (r "(\ + \ d {1, 2})? [\ s .-]? \ d {3} [\ s .-]? \ d {4} ") myfile olarak açık ('info.txt', 'rt'): myfile'deki satır için: linenum + = 1 ise pattern.search (line)! = Yok: # Desen arama eşleşme bulursa, hatalar .append ((linenum, line.rstrip ('\ n'))) hatalardaki hatalar için: print ("Line", str (err [0]), ":" + err [1])
Çıktı
3. Hat: Telefon numaram 731.215.8881. 7. Hat: Bay Walters'a (212) 558-3131 numaralı telefondan ulaşabilirsiniz. Satır 12: Ajanı Bayan Kennedy, +12 (123) 456-7890 numaralı telefondan ulaşılabilir. Satır 14: Ayrıca (888) 312.8403 numaradan, 12 numaradan da ulaşılabilir.
Kelimeler için sözlük arayın
Aşağıdaki program, h ile başlayan ve pe ile biten kelimeleri arar. Giriş için, pek çok Unix sistemde bulunan / usr / share / dict / words içinde bulunan bir sözlük dosyasını kullanır.
re yeniden dosyaadı = "/ usr / share / dict / words" pattern = re.compile (r "\ bh \ w * pe $", re.IGNORECASE) myfile olarak açık (dosyaadı, "rt"): myfile: if pattern.search (line)! = Yok: yazdır (satır, bitiş = '')
Çıktı
Umut heliotrope umut hornpipe burç yutturmaca