2016-07-07 94 views
0

假設我有一些描述性文件名約定命名約定,例如:什麼是壓縮文件名的好方法?

typ_blue_sz_00215416_st_00001_end_00138_p1_ht_p2_w_p3_wt_ts_20160707130232.h5

在此(由)例如,該文件是一個HDF5數據文件,並且文件名是通過組合分隔下劃線和關鍵字。關鍵字這裏是typ爲「型,」 sz爲「大小」 st爲「開始」,endp1 - p3爲「參數1到3」,ts代表「時間戳」。以這種方式命名文件便於編程解析和人類可讀性......但是隨着元數據量的增加,文件名接近操作系統限制(在Windows的情況下爲256)。

我們需要一種方法來大幅縮短這些文件名。我們都同意,我們不想依賴從文件中讀取這些元數據......我們希望它在文件名中。儘管如此,只要簡單的程序解析仍然存在,我們就願意妥協,只要人類的可讀性。

一種解決方案是實現某種代碼和映射......以便我們可以用較少的字符傳送相同數量的數據,只要您有解碼器。有更好的方法嗎?有什麼標準的解決方案來解決這個問題嗎?想到的一件事是TinyURL,它似乎使用相同的概念進行操作。

+0

是否所有文件中使用的所有關鍵字和相同的順序?如果是這樣,刪除關鍵字,只有值由分隔符分隔 - 即。第一個值始終是類型,第二個值始終是大小等。還使用數字常量代替值:1 = txt,2 = jpeg等 – ABuckau

回答

1

使用二進制對信息進行編碼,使用Base64或類似方法將其轉換爲允許的文件名字符。我們假設你有3位顏色,27位大小,17位開始,17位結束,8位三個參數中的每一個參數(隨着我的進展而變化),以及時間戳爲32位。總共是120位。使用Base64,可以編碼爲20個字符。結果看起來是這樣的:

rSitpmY9RX1kq6N73ML1.h5

+0

這是否實際上縮短了文件名?就像我上面給出的例子,我可以用二進制編碼,然後以64爲基礎嗎?我實際上在Python中嘗試過它,當你建議它...將字符串轉換爲二進制,然後基於64,它比我開始時有更多的字符。也許如果我確保字符串是ASCII碼?你能提供一個例子嗎? –

+0

恩,是的。 77個字符的名字變成了23個字符。看起來縮短了我。我認爲你沒有得到它。你需要找出你在名字中編碼的信息,並且只將這些信息儘可能地放在一串比特中。將該位串轉換爲字節。做一個Base64轉換。 –

+0

是的,但似乎你暗示我截斷了我的字符串......即刪除「不需要的」部分,然後以64爲基礎。我想要一些基本上能讓我對當前字符串(我可以限制爲一小部分ASCII字符串)進行直接轉換的小字符串......然後輕鬆轉換回來,最好不用額外的鍵。我認爲這個答案讓我走上正軌! Upvoted。 :) –

相關問題