Formatı belli olmayan dosyalar nasıl okunur ?

Arkadaşlar dosya formatı belli olmayan dosyaları Python ile nasıl okuyabilirim birkaç deneme yaptım ama hep hata verdi…

Okumak istediğim dosya:
sample

Yazdığım kod ve verdiği hata mesajı:

with open(pach + '/Bookmarks', 'r', 'UTF-8') as file:
    print(file.read())

with open(pach + '/Bookmarks', 'r', 'UTF-8') as file:
TypeError: an integer is required (got type str)

Şöyle bir bakın isterseniz

Glob modülü ile dosyanızı aratın. Örneğin adı deneme, uzantısı belli değilse;

import glob
a = glob.glob("deneme.*")
if len(a) == 1:
    with open(a[0]):
        #falan filan

Sizin hata alma nedeniniz farklı. Konumsal argümanlar kullanarak 3. sırada olan buffering parametresine 'UTF-8' değerini veriyorsunuz ancak bu parametre bir tamsayı bekliyor. Şöyle bir kod yazmalısınız:

with open(pach + '/Bookmarks', 'r', encoding='UTF-8') as file:
    print(file.read())

encoding parametresi 4. sırada olduğu için bu parametreye bir argüman vermek için bu şekilde bir anahtar sözcük argümanı kullanmalısınız.

Sorunuza gelirsek; öncelikle şunu sormalıyım: Uzantısını bilmediğiniz bu dosyaların metin dosyası mı yoksa ikili dosya mı olduğunu biliyor musunuz yoksa o da belli değil mi?

Metin dosyası ve içerisinde bir json objesi var. Cevap için teşekkürler sorunsuz çalışıyor :blush:
Bu arada ikili dosya dediğiniz binary sayılardan oluşan mı 00010101 gibi ?

Evet öyle. En iyi örnek de pdf dosyaları.

Binary dosyaları normal bir metin düzenleyici ile açarsanız karmaşık ve anlamsız karakter topluluğu görürsünüz. Böyle dosyaları okuyabilmek için formatını bilmek gerekir. Aksi takdirde rastgele okuduğunuzda elinize sadece anlamsız karakterler geçecektir.

Dosyanın formatını nasıl öğrenebiliriz? Karakterlerden yola çıkarak mı yoksa gizli bir bölümünde yazıyormudur ya da hiç olmadığı için bulamaz mıyız?

https://belgeler.yazbel.com/python-istihza/ikili_dosyalar.html

Burası yardımcı olabilir

Bu bölümü okumuştum. Yine gözatarım ama daha doğru bir şekilde sorumu sorayım: Bizim bir dosyamız var ve pdf vesaire değil. Gizli bir kod kısmı da yok ki bulamıyoruz biçimlendirme tipini. Bu halde bu dosyanın formatını nasıl öğrenebiliriz?

Dosyaların başlık bilgisi,yapı bilgisi vardır. Örneğin PNG dosyalarının başlık yapısının nasıl olduğuna buradan bakabilirsiniz.

http://www.libpng.org/pub/png/spec/1.2/PNG-Rationale.html

Ya da bir PDF dosyasının yapısı nasıldır merak ediyorsanız

http://lotabout.me/orgwiki/pdf.html

Eğer böyle bir işlemi Python’da hazır modüller ile yapmak isterseniz şu sayfalara bir göz atın

https://hackernoon.com/determining-file-format-using-python-c4e7b18d4fc4

Çok teşekkür ederim bakacağım buna :slight_smile:

Rica ederim kolay gelsin :slight_smile:

python-magic işinizi görür. Normalde bir ikili dosyanın, uzantısı olmadan, tipini bulmak mümkün değildir. @coderistan’ın bahsettiği gibi her dosyanın belirli bir biçimi vardır ve bu biçimlerden dosyanın tipi belirlenebilir. Ancak bu her dosya tipi için belirli bir baytta dosya tipinin yazması şeklinde değildir. Yani belirli bir baytta ‘PDF’, ‘PNG’ ya da ‘ZIP’ ismini okuyacağınızın garantisi yok. python-magic de muhtemelen belirli kalıplara bakarak dosya tiplerini buluyor.

Ayrıca Linuxda file komutu var. O da dosya tipini buluyor. Ayrıca exiftool’a da bakmanızı tavsiye ederim.

Bu bilgiyi aldığım iyi oldu teşekkür ederim. Bahsi geçen python-magic ’ e de bakacağım müsait bir zamanda… Teşekkürler

Tesekkurler ama linux kullanmıyorum windows kullanıyorum, farkı olur mu bilgim yok pek… :blush:

Ufak duzeltme:

Linux masaustu sistemlerin normalde yaptigi tam olarak bu. Her dosya icin gecerli degil elbet, ama “ben bunu ne ile calistiracagim” sorusuna dosyanin MIME tipini bularak karar veriyor. Bunun icin burada da bahsi gecen “magic” sistemi kullaniliyor.

Windows’un aksine, dosya uzantisi kullanilmiyor. (Ve simdi baktim, Mac OS X de Linux gibiymis)

bkz/man: file(1), mimetype(1) ve magic(5)

Okumaya çalıştığım dosya Binary dosyası değil, metin dosyası ama dediğim gibi formatı pelli değil.