2016-07-07 9 views
0

は、例えば、いくつかの命名規則に合意したと私は記述のファイル名があるとします。この中ファイル名を圧縮する良い方法は何ですか?

typ_blue_sz_00215416_st_00001_end_00138_p1_ht_p2_w_p3_wt_ts_20160707130232.h5

(アップ製)の例では、ファイルがHDF5データファイルで、ファイル名は組み合わせによって区切られますアンダースコアとキーワードのここでのキーワードは、「タイプ」が「タイプ」の場合はtyp、「サイズ」がsz、「開始」がst、「パラメータ1〜3」がend,-、が「タイムスタンプ」を表します。このようにファイルを命名すると、プログラムによる解析と人間の読みやすさが実現します...しかし、メタデータの量が増えれば、ファイル名はOS制限(Windowsの場合は256)に近づきます。

これらのファイル名を大幅に短縮する方法が必要です。私たちはすべて、ファイル内からこのメタデータを読み込むことに依存したくないということに同意しています。しかし、簡単なプログラム解析が残っている限り、人間の読みやすさについては妥協するつもりはありません。

1つの解決策は、ある種のコードとマッピングを実装することです。デコーダがあれば、少ない文字数で同じ量のデータを伝えることができます。より良い方法がありますか?この問題に対する標準的な解決策がありますか?心に浮かぶことの1つはTinyURLです。これは同じ概念を使用して動作するようです。

+0

:結果は次のようになりますか?その場合は、キーワードを削除して、値をいくつかの区切り記号で区切ってください。最初の値は常にタイプ、2番目の値は常にサイズなどです。値の代わりに数値定数を使用してください:1 = txt、2 = jpegなど – ABuckau

答えて

1

バイナリで情報をエンコードします。これは、Base64などを使用してfilename文字を許可するように変換します。

色については3ビット、サイズの場合は27ビット、開始の場合は17ビット、終了の場合は17ビット、3つのパラメータのそれぞれについては8ビット(ちょうどこれを作成します)、タイムスタンプ用の32ビット。それは合計120ビットです。 Base64を使用すると、20文字にエンコードできます。すべてのファイルがすべてのキーワードを使用し、同じ順序で行い

rSitpmY9RX1kq6N73ML1.h5

+0

これは実際にファイル名を短くしますか?上記の例のように、64ビットのバイナリでエンコードすることはできますか?私は実際にあなたがそれを提案したときにPythonでそれを試しました...文字列をバイナリに変換してから64をベースにし、それよりも多くの文字を使い始めました。おそらく私は文字列がASCIIであることを保証すれば?あなたは例を挙げることができますか? –

+0

ええ、はい。 77文字の名前は23文字になりました。見た目は私に短縮されます。私はあなたがそれを得ているとは思わない。あなたは名前の中でどの情報をエンコードしているのか把握し、その情報だけをビット列にできるだけ少ないビット数で入れる必要があります。そのビット列をバイトに変換します。 Base64変換を行います。 –

+0

はい、それはあなたが私の文字列を切り捨てることを意味していると思われます。すなわち、 "不要な"部分を削除して、それを基にします。私は本質的に私の現在の文字列(ASCIIの小さなサブセットに制限することができます)をより小さな文字列に変換できるようにしたいと思っています。私はこの答えが正しい道に私を置くと思う! Upvoted。 :) –

関連する問題