tl; dr - 嘗試對專有數據庫文件進行逆向工程時,發現Wordpad能夠自動將某些數據解碼爲易讀的格式。我試圖在python中實現該解碼。現在,即使寫字板伏都不可重複。嘗試在Python中解壓/解碼專有數據文件
準備好一個腦筋急轉彎?
我試圖破解一些奇怪的問題。我有一個數據文件,它是科學儀器(Mettler DSC/STARe軟件)程序的數據庫,我試圖從實驗中獲取樣本信息。從我在文件中的挖掘中,它似乎包含明文,有關實驗運行的未加密信息以及數據。它是一個.t00文件,大小超過40 MB(它基本上存儲了運行的所有數據),而且我對編碼知之甚少(除了它看似任意,它不是一個文本文件)。我可以在寫字板中打開這個文件,並可以看到我正在查找的信息(樣本名稱,時間戳,實驗參數),並由實驗運行數據包圍(如預期的那樣,這看起來像很多gobbledygook,例如¶+ú@「< Ø@ DSSO @¨...)。似乎我基本上能夠對內容有所瞭解,並且我試圖複製它。
我可以用一個基本的文件處理程序將文件讀入python中,並使用正則表達式來獲得我想要的一些信息。 'r'和'rb'似乎沒有幫助。
def textOpenLines(filename,mode='rb'):
with open(filename, mode) as content_file:
return [line for line in content_file]
我可以拿到該列表並搜索相關字符串並從中獲取示例名稱。但是從在寫字板中查看文件,我發現樣本名稱列出了兩次,第二次在它後面有日期戳記(例如'Dibenzoylperoxid 120 C 03.05.1994 14:24:30')。在Python中,我找不到這個字符串。我甚至找不到自己的時間戳。當我查看應該發生的行時,我會得到一堆隨機字節。在記事本中打開看起來像python輸出。
我懷疑這是一個編碼問題。我試着以Unicode格式閱讀文件,我嘗試過使用片段和閱讀這些文件,但我無法破解它。我很難過。
有關如何閱讀此內容以便它解碼正確的任何想法?寫字板得到它的權利(雖然現在隨後試圖打開它,它看起來像記事本輸出)。
謝謝!
編輯:
- 我不知道是誰改了稱呼,當然它看起來像在Python /記事本中隨機字節「。這主要是數據。
- 它不是一個文本文件。我很喜歡寫字板開局
- 它沒有損壞。 DSC儀器程序讀取它就好了。它只是專有的,所以我不知道它是如何剔除的。
- 我試過使用'r','rb'和'U'標誌。
- 我試過使用utf8,16和32的codecs.open,但它給UnicodeDecodeError:'utf8'編解碼器無法解碼位置49中的字節0xdf:無效的連續字節。我不認爲它有一個BOM,因爲我不認爲它是人類可讀的。
前32字節(f。讀(32))讀取
「\ X10 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ X00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x00 \ x04 \ x10 \ x00 \ x00'
我不太瞭解物料清單,但是從閱讀維基頁面看,看起來不像任何有效的UTF標記。
文件,首先,當在寫字板自動地解碼的開始,看起來像這樣: 121 22Dibenzoylperoxid 120℃1994年5月3日14點24分三十秒1 0 4096 ESTimeAI- @£®@ NOA @ 49O @ KEA @FÞò@`STH @N5A2A® 「A」 A-¥A¿ÝA¡zA「ÓAÿãAÐÅAäHA,œAÑÌAŸäA¤ÆAE-AFNATöAÐ|AõAº^ A(ÄAèAýqA¹AÖûAº8A¬uAK«AgÜAüAÞAo4A>ñ AFAB
的開始文件,當在記事本,Python和現在寫字板中打開時,看起來像這樣: (空字節x00 ...)](x00 ...)eß(x00 ...)NvN(x00)...等
我試圖解碼一個未知文件時做的第一件事是[hexdump](http://en.wikipedia.org/wiki/Hex_dump)...呃,實際上是_second one_,剛剛運行[文件(http://linux.die.net/man/1/file)。你嘗試過嗎?也許這是一個衆所周知的格式「隱身」作爲別的東西? – 2014-08-28 20:01:08
你確定這個文件實際上是一個文本文件嗎?如果它是來自某個程序的數據庫,它可能不會被認爲是純文本。 – BrenBarn 2014-08-28 20:02:16
快速谷歌搜索表明應該有一個'.h01'文件,它是人類可讀的(csv我想),而'.t00'文件是一些專有格式。 – roippi 2014-08-28 20:05:06