Python'da İkili Dosyalar Nasıl Okunur

How Read Binary Files Python



İkili verileri içeren dosyaya ikili dosya denir. Biçimlendirilmiş veya biçimlendirilmemiş ikili veriler bir ikili dosyada saklanır ve bu dosya insan tarafından okunamaz ve doğrudan bilgisayar tarafından kullanılır. İkili bir dosyanın bir konumdan başka bir konuma okunması veya aktarılması gerektiğinde, dosyanın içeriği insan tarafından okunabilir bir biçime dönüştürülür veya kodlanır. İkili dosyanın uzantısı .bin'dir. İkili dosyanın içeriği, yerleşik bir işlev veya modül kullanılarak okunabilir. Bu eğitimde Python'da ikili dosyaları okumanın farklı yolları gösterilmiştir.

Ön koşul:

Bu öğreticinin örneklerini kontrol etmeden önce, örnek komut dosyasında kullanmak üzere bir veya daha fazla ikili dosya oluşturmak daha iyidir. İki ikili dosya oluşturmak için iki python dosyasının komut dosyası aşağıda verilmiştir. binary1.py adlı bir ikili dosya oluşturacaktır. string.bin dize verilerini içerecek ve binary2.py adlı bir ikili dosya oluşturacaktır. sayı_listesi.bin sayısal verilerin bir listesini içerecektir.







Binary1.py

# İkili dosya oluşturmak için bir dosya işleyici açın

dosya_işleyicisi= açık('dize.bin', 'wb')

# İkili dosyaya iki satır metin ekleyin

dosya_işleyicisi.yazı yazmak(B'LinuxHint'e hoş geldiniz. Python Programlamayı öğrenin.')

# Dosya işleyiciyi kapatın

dosya_işleyicisi.kapat()

Binary2.py

# İkili dosya oluşturmak için bir dosya işleyici açın

dosya=açık('number_list.bin','wb')

# Sayısal değerlerin bir listesini bildirin

sayılar=[10,30,Dört beş,60,70,85,99]

# Listeyi diziye çevir

engel=bayt dizisi(sayılar)

# Diziyi dosyaya yaz

dosya.yazı yazmak(engel)

dosya.kapat()

Örnek-1: Dize verilerinin ikili dosyasını bayt dizisine okuyun

Python'da ikili dosyayı okumanın birçok yolu vardır. Bir seferde belirli sayıda bayt veya ikili dosyanın tüm içeriğini okuyabilirsiniz. Aşağıdaki komut dosyasıyla bir python dosyası oluşturun. NS açık() işlevi açmak için kullandı string.bin okumak için. NS oku() işlevi while döngüsünün her yinelemesinde dosyadan 7 karakter okumak ve yazdırmak için kullanılmıştır. Daha sonra, oku() işlevi daha sonra yazdırılacak ikili dosyanın tüm içeriğini okumak için herhangi bir argüman olmadan kullanılmıştır.



# Okumak için ikili dosyayı açın

dosya_işleyicisi= açık('dize.bin', 'rb')

# İkili dosyadan ilk üç baytı okuyun

data_byte=dosya_işleyicisi.okuman(7)

Yazdır('Her yinelemede üç karakter yazdırın:')

# Dosyanın kalan kısmını okumak için döngüyü yineleyin

süredata_byte:

Yazdır(data_byte)

data_byte=dosya_işleyicisi.okuman(7)


# Tüm dosyayı tek bir bayt dizesi olarak okuyun

ile birlikte açık('dize.bin', 'rb') olarakfh:

içerik=fh.okuman()

Yazdır('İkili dosyanın tam içeriğini yazdırın:')

Yazdır(içerik)

Çıktı:

Yukarıdaki betiği çalıştırdıktan sonra aşağıdaki çıktı görünecektir.







Örnek-2: Dize verilerinin ikili dosyasını diziye okuyun

Adlı bir ikili dosyayı okumak için aşağıdaki komut dosyasıyla bir python dosyası oluşturun. sayı_listesi.bin daha önce oluşturuldu. Bu ikili dosya, sayısal verilerin bir listesini içerir. Önceki örnekte olduğu gibi, açık() işlevi komut dosyasında okumak için ikili dosyayı açmayı kullandı. Ardından, ilk 5 sayı ikili dosyadan okunacak ve yazdırmadan önce bir listeye dönüştürülecektir.

# Okumak için ikili dosyayı açın

dosya = açık('number_list.bin', 'rb')

# Listedeki ilk beş sayıyı okuyun

sayı= liste(dosya.okuman(5))

# Listeyi yazdır

Yazdır(sayı)

# Dosyayı kapatın

dosya.kapat()

Çıktı:

Yukarıdaki betiği çalıştırdıktan sonra aşağıdaki çıktı görünecektir. İkili dosya 7 sayı içerir ve ilk beş sayı çıktıda yazdırılır.



Örnek-3: NumPy kullanarak ikili dosyayı okuyun

kullanarak ikili dosya oluşturmanın yolları NumPy dizisi ve kullanarak ikili dosyanın içeriğini bir liste halinde okuyun. NumPy modülü öğreticinin bu bölümünde gösterilmiştir. Aşağıda verilen betiği kontrol etmeden önce, NumPy modülü komutu terminalden yürüterek veya NumPy paketi betiğin yürütüleceği Python düzenleyicide. NS tofile() işlevi bir metin veya ikili dosya oluşturmak için kullanılır ve fromfile() işlevi bir metin veya ikili dosya okuyarak bir dizi oluşturmak için kullanılır.

tofile() sözdizimi:

ndararay.dosyalamak(dosya,Eylül='',biçim='%s')

İlk argüman zorunludur ve dosya adını veya dizeyi veya yolu bir değer olarak alır. Bu bağımsız değişkende bir dosya adı sağlanırsa dosya oluşturulur. İkinci argüman, dizi öğelerini ayırmak için kullanılan isteğe bağlıdır. Üçüncü argüman da isteğe bağlıdır ve metin dosyasının çıktısını biçimlendirmek için kullanılır.

formfile() sözdizimi:

dizi.dosyadan(dosya,tip=batmadan yüzmek,saymak=-1,Eylül='',telafi etmek=0,*,sevmek=Hiçbiri)

İlk argüman zorunludur ve dosya adını veya dizeyi veya yolu bir değer olarak alır. Bu argümanda bir dosya adı verilecekse dosyanın içeriği okunacaktır. NS tip döndürülen dizinin veri türünü tanımlar. Sayı, öğelerin sayısını saymak için kullanılır. Amacının Eylül metin veya dizi öğelerini ayırmaktır. Ofset, dosyanın mevcut konumunu tanımlamak için kullanılır. Son argüman, bir dizi nesnesi olmayan bir dizi nesnesi oluşturmak için kullanılır. NumPy dizisi .

Aşağıdaki komut dosyasını kullanarak bir ikili dosya oluşturmak için bir python dosyası oluşturun. NumPy dizisi ve ikili dosyanın içeriğini okuyup yazdırın.

# NumPy modülünü içe aktar

içe aktarmakdiziolarakÖrneğin

# numpy dizisi bildir

nparray=Örneğin.dizi([3. 4, 89, 30, Dört beş, 90, on bir])

# Numpy dizisinden ikili dosya oluştur

nparray.dosyalamak('liste.bin')

# İkili dosyadan veri yazdırın

Yazdır(Örneğin.dosyadan('liste.bin',tip=Örneğin.int64))

Çıktı:

Yukarıdaki betiği çalıştırdıktan sonra aşağıdaki çıktı görünecektir.

Çözüm:

Bu öğreticide, basit örnekler kullanılarak ikili dosyayı okumanın üç farklı yolu gösterilmiştir. İlk örnek, ikili dosyanın içeriğini bir bayt dizisi olarak döndürdü. İkinci örnek, ikili dosyanın içeriğini bir liste olarak döndürdü. Son örnek, ikili dosyanın içeriğini de bir liste olarak döndürdü.