Bir nesneyi bir dize kalıbı kullanarak işlemek istiyorsanız, re
kitaplƒ±ƒüƒ±na bir dize saƒülamalƒ±sƒ±nƒ±z. "bayt‚" veri turu, "TypeError: bayt benzeri bir nesnede dize deseni kullanamazsƒ±nƒ±z‚" error.
Bu kƒ±lavuz, bu hatanƒ±n ne anlama geldiƒüi ve bu hatayla neden kar≈üƒ±la≈üabileceƒüiniz hakkƒ±nda konu≈üuyor. Hatayƒ± ç√∂zmek için hangi adƒ±mlarƒ±n atƒ±lacaƒüƒ±nƒ± g√∂rebilmeniz için size bu hatanƒ±n bir √∂rneƒüini g√∂stereceƒüiz.
TypeError: bayt benzeri bir nesnede dize kalıbı kullanamaz
Bytes nesneleri bir dizi tek bayt içerir. Dizeler gibi deƒüi≈ümezler, yani deƒüi≈ütirilemezler. Bir ikili dosya okuduƒüunuzda veya "request‚" bir web sitesinden veri almak için.
re
kitaplƒ±ƒüƒ±nƒ± kullanƒ±rken, bayt veya nesneler kullanarak çalƒ±≈ümanƒ±z gerekir. Bir bayt nesnesi için dize kalƒ±plarƒ± belirtemezsiniz ve bunun tersi de geçerlidir.
Bayt verileriyle çalƒ±≈üƒ±yorsanƒ±z, programƒ±nƒ±z bayt cinsinden bir normal ifade kalƒ±bƒ± belirtmelidir. Dizelerle birlikte normal ifade kullanƒ±yorsanƒ±z, dize tabanlƒ± bir normal ifade kalƒ±bƒ± saƒülayƒ±n.
Örnek Senaryo
Bir web sayfasƒ±nƒ±n ba≈ülƒ±ƒüƒ±nƒ± alan bir program yazacaƒüƒ±z. Bu eƒüitim için Python.Engineering web sitesiyle çalƒ±≈üƒ±yoruz.
Ba≈ülamak için, ihtiyacƒ±mƒ±z olan iki kitaplƒ±ƒüƒ± içe aktaralƒ±m programƒ±mƒ±zƒ± olu≈üturmak için: urllib ve re.
urllib
kitaplığı web istekleri yapmamıza izin verir ve re
kitaplığı bize programımızda normal ifade kullanma yeteneği verir.
Katƒ±lƒ±mcƒ±larƒ±n %81’i, bir eƒüitim kampƒ±na katƒ±ldƒ±ktan sonra teknik i≈ü beklentileri konusunda daha emin hissettiklerini belirtti. Bugun bir eƒüitim kampƒ± ile e≈üle≈ütirin.
Ortalama bir eƒüitim kampƒ± mezunu, bir eƒüitim kampƒ±na ba≈ülamaktan ilk i≈üini bulmaya kadar, kariyer geçi≈üinde altƒ± aydan az zaman harcadƒ±.
Sonra, bir < Python.Engineering ana sayfasına bir href="/what-is-http/">web isteği:
Program a≈üaƒüƒ±dakilerin içeriƒüini alƒ±r Python.Engineering ana sayfasƒ±. Bu veriler, urlopen()
y√∂nteminin bir parçasƒ± olan read()
y√∂ntemi kullanƒ±larak okunur. Bu verileri "res‚" deƒüi≈üken.
Artık programımızdan gelen verilere sahip olduğumuza göre, sorguladığımız web sayfasındaki
search()
y√∂ntemini kullanƒ±n. etiketi bir web sayfasƒ±nƒ±n ba≈ülƒ±ƒüƒ±nƒ± içerir.Web sayfasƒ±nƒ±n ba≈ülƒ±ƒüƒ±nƒ± bulmak için re.search()
yöntemini kullanın:
Programımız
Programƒ±mƒ±zƒ± çalƒ±≈ütƒ±ralƒ±m ve çalƒ±≈üƒ±p çalƒ±≈ümadƒ±ƒüƒ±nƒ± g√∂relim:
Programımız tam olarak yurutulemiyor.
"home‚" (web sayfamƒ±zdan gelen yanƒ±t) bir bayt nesnesidir, ancak bir web sayfasƒ±nƒ±n ba≈ülƒ±ƒüƒ±nƒ± bulmak için kullandƒ±ƒüƒ±mƒ±z kalƒ±p bir dizedir. Bu bir hataya neden olur çunku dize kalƒ±plarƒ±nƒ± bayt nesnelerle e≈üle≈ütiremeyiz.
Bu sorunu ç√∂zmenin iki yolu vardƒ±r.
√á√∂zum #1: Dize Kalƒ±bƒ±nƒ± Bayt’a D√∂nu≈ütur ;
Kullandƒ±ƒüƒ±mƒ±z string deseni bytes nesnesine çevirmeliyiz. Bunu, "b‚" anahtar kelime veya bytes()
yöntemi:
"b‚" Anahtar kelime daha yaygƒ±ndƒ±r çunku okunmasƒ± daha kolaydƒ±r. Artƒ±k dize modelimizi baytlara d√∂nu≈üturduƒüumuze g√∂re, kodumuzu çalƒ±≈ütƒ±rabiliriz:
Kodumuz, sorgumuzla eşleşen metni döndurur.