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?

4 Beğeni

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ı.

1 Beğeni

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.

1 Beğeni

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

2 Beğeni

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

1 Beğeni

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

2 Beğeni

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

1 Beğeni

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.

2 Beğeni

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

2 Beğeni

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.