كيفية فصل المحتوى من ملف حاوية الثنائية وغيرها من أشكال المحتوى

StackOverflow https://stackoverflow.com/questions/822161

سؤال

أنا أحاول تحليل بعض .ملفات txt.هذه الملفات تكون بمثابة حاويات عدد متغير من "الأطفال" الملفات التي يتم تعيين أو تحديد داخل الحاوية مع SGML العلامات.مع بيثون يمكن بسهولة فصل الأطفال الملفات.ومع ذلك أواجه مشكلة في كتابة المحتوى ثنائي كما ملف ثنائي (أقول gif أو jpg).في أبسط الحالات الحاوية قد يكون جزءا لا يتجزأ من ملف html تليها الرسم الذي يسمى من قبل html.أنا على افتراض أن مشكلتي لأنني القراءة الأصلية .ملف txt باستخدام المفتوحة(filename,'r').ولكن يبدو أن الخيار الوحيد للعثور على sgml العلامات تقسيم الملف.

وأود أن نقدر أي مساعدة لتحديد بعض مواد القراءة.

أنا أقدر الاقتراحات ولكن أنا لا تزال تكافح مع معظم الأسئلة الأساسية.على سبيل المثال عند فتح الملف مع الدفتر و انتقل لأسفل إلى القسم يوصف gif أرى هذا:

<FILENAME>h65803h6580301.gif
<DESCRIPTION>GRAPHIC
<TEXT>
begin 644 h65803h6580301.gif
M1TE&.#EA(P)I`=4@`("`@,#`P$!`0+^_OW]_?_#P\*"@H.#@X-#0T&!@8!`0
M$+"PL"`@('!P<)"0D#`P,%!04#\_/^_O[Y^?GZ^OK]_?WX^/C\_/SV]O;U]?

أستطيع التعامل مع إيجاد القسم بسهولة بما فيه الكفاية ولكن أين ملف gif تبدأ.لا رأس تبدأ مع 644, الفراغات بعد كلمة تبدأ أو خط بداية مع سوس?

التالي, عند قراءة الملف في بيثون يفعل أي شيء إلى رمز ثنائي يجب أن يكون التراجع عند قراءتها مرة أخرى ؟

يمكنني العثور على خطوط حيث الرسومات تبدأ:

filerefbin=file('myfile.txt','rb')
wholeFile=filerefbin.read()
import re
graphicReg=re.compile('<DESCRIPTION>GRAPHIC')
locationGraphics=graphicReg.finditer(wholeFile)
graphicsTags=[]
for match in locationGraphics:
    graphicsTags.append(match.span())

أنا يمكن بسهولة استخدام نفس العملية للحصول على كلمة begin أو تحديد اسم الملف و الوصول إلى نهاية اسم الملف في أول السطر.كما successefully نصل إلى نهاية جزءا لا يتجزأ من ملف gif.ولكن لا أستطيع كتابة التركيبة الصحيحة من الأمور حتى عند النقر المزدوج على h65803h6580301.gif عندما تم عزله حفظ أرى الرسم.

ومن المثير للاهتمام ، عندما فتح ملف في م ع خط النهايات تظهر أن تكون لا تزال موجودة على الرغم من أنها لا يبدو أن لها أي تأثير في notebpad.لذا ومن الواضح أن واحدة من المشاكل التي قد تحتاج إلى readlines والانضمام إلى خطوط معا بعد تجريد من

أنا أحب هذا الموقع و أنا أحب الثعبان

كان هذا سهل جدا بمجرد أن قرأت bendin بعد.أود فقط أن قص المقطع الذي بدأ بكلمة تبدأ وحفظ ذلك في ملف txt ثم قم بتشغيل الأمر التالي:

import uu
uu.decode(r'c:\test2.txt',r'c:\test.gif')

يجب أن نعمل مع بعض الأشياء الأخرى لبقية اليوم ولكن أنا سيتم نشر المزيد من هنا نظرت عن كثب.أول شيء أنا بحاجة إلى اكتشاف كيفية استخدام شيء آخر غير الملف الذي هو منذ قرأت كله .ملف txt في الذاكرة و قص خارج القسم الذي يحتوي على الصورة التي كنت بحاجة إلى العمل مع قص الجزء بدلا من الكتابة بها test2.txt.أنا متأكد من أنه يمكن القيام به فقط معرفة كيفية القيام بذلك.

هل كانت مفيدة؟

المحلول

ما كنت تبحث في ليس "الثنائية" ، uuencoded.بيثون المكتبة القياسية تشمل وحدة ش ش, إلى التعامل مع uuencoded البيانات.

وحدة ش ش يتطلب استخدام الملفات المؤقتة لتشفير وفك التشفير.يمكنك إنجاز هذا دون اللجوء إلى الملفات المؤقتة باستخدام بايثون الترميز وحدة من هذا القبيل:

import codecs

data       = "Let's just pretend that this is binary data, ok?"
uuencode   = codecs.getencoder("uu")
data_uu, n = uuencode(data)
uudecode   = codecs.getdecoder("uu")
decoded, m = uudecode(data_uu)

print """* The initial input:
%(data)s
* Encoding these %(n)d bytes produces:
%(data_uu)s
* When we decode these %(m)d bytes, we get the original data back:
%(decoded)s""" % globals()

نصائح أخرى

وأنت بالتأكيد تحتاج إلى قراءة في الوضع الثنائي إذا كان محتوى يتضمن الصور JPEG.

وكذلك، يتضمن بيثون محلل SGML، http://docs.python.org/ مكتبة / sgmllib.html .

وليس هناك سبيل المثال هناك، ولكن كل ما عليك القيام به هو الطرق do_ الإعداد للتعامل مع العلامات إس جي إم إل كنت ترغب في ذلك.

وتحتاج إلى open(filename,'rb') لفتح الملف في الوضع الثنائي. كن على علم بأن هذا سوف يسبب الثعبان لإعطاء أنت مربكة، نهايات خط اثنين بايت على بعض أنظمة التشغيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top