2011-02-09 9 views
-1

ディレクトリのファイルの名前をPythonのハッシュで変更する必要があります。私はC#を使用して同じことをやった:pythonでsha1ハッシュを使ってディレクトリ内のファイルの名前を変更する方法は?

Console.Write("enter path"); 
     string path = Console.ReadLine(); 

     foreach (var i in Directory.GetFiles(path)) 
     { 
      try 
      { 
       using (SHA1Managed sha1 = new SHA1Managed()) 
       { 
        FileStream f = new FileStream(i.ToString(), FileMode.Open); 
        byte[] hash = sha1.ComputeHash(f); 
        string formatted = string.Empty; 
        foreach (byte b in hash) 
        { 
         formatted += b.ToString("X2"); 
        } 
        f.Close(); 

        File.Move(i.ToString(), path+"//" + formatted); 
       } 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(i.ToString()); 
      } 

誰かが私は私が同じことを達成するためPythonで使用したいものと始めるのに役立つことはできますか?私はUbuntuを使用しています。

+2

まず、UbuntuでC#コードをコンパイルしてみませんか?それはうまく動作します。次に、具体的な質問は何ですか?何を試しましたか?これは、人間を使ってあなたのために考えを行うフリーコード変換サイトではありません。 –

+0

私はJimに同意します:あなたはC#コードを持っています。モノは完璧ではないかもしれませんが、私はそれがうまくそのコードを実行することを確信しています。 –

+0

変換しないと私のためにリンク(記事サンプル)を提供してください!私はPythonでそれを書く必要があります – maysam

答えて

3

ハッシュ(MD5、SHA1)を計算したい場合は、hashlibモジュールがあります。 ファイルシステム上でいくつかの操作を行うには、osモジュールがあります。これらのモジュールには、sha1オブジェクトとhexdigest()メソッドとlistdir()rename()関数があります。コード例:

import os 
import hashlib 

def sha1_file(fn): 
    f = open(fn, 'rb') 
    r = hashlib.sha1(f.read()).hexdigest() 
    f.close() 
    return r 

for fn in os.listdir('.'): 
    if fn.endswith('.sha'): 
     hexh = sha1_file(fn) 
     print('%s -> %s' % (fn, hexh)) 
     os.rename(fn, hexh) 

注意:それは巨大なファイルのために非常にうまく機能しませんので、sha1_file()機能は、一度にファイル全体を読み込みます。宿題はそのようなファイルのためにそれを改善することを試みる(部分のファイルを読み、それらの部分とハッシュを更新する)。

もちろん、if fn.endswith('.sha'):はテスト目的でのみ使用されます。

関連する問題