# -*- coding: cp936 -*- ############################################################ # convert mldonkey's chinese # Version:    0.1 # Author: kongxx # Email: kongxxcn@yahoo.com.cn ############################################################ import os ,sys ,string ,urllib ,telnetlib ,operator   # define the mldonkey incoming dir sdir='/usr/local/mldonkey/incoming/'   #flag the num sNum='0123456789'   #length  len8 = 8  len12 = 12 lengths = [len8 ,len12]   def convert():      filenames=os.listdir(sdir)      for filename in filenames :          for length in lengths :               s1 = filename               s2 = convertName(filename ,length)               try :                    if s1 != s2 :                                       print '############################################################'                        print 'The source name is:' + s1                         print 'The target name is:' + s2                         print ''                        confirm = raw_input('Do you confirm rename the file[yes or no]? ')                        if confirm == 'yes' :                             os.rename(sdir + s1 ,sdir + s2)                             break                except UnicodeDecodeError:                    print ''   # convert ths file name # param s the filename  # param length  def convertName(s ,length) :      location = 0      ret = ''        if length not in lengths:          return s        while True :          if location + length <= len(s) :               subStr = s[location:location + length]               if check(subStr) :                    if length == len8 :                        ret += "%" + hex((int)(subStr[1:4]))[2:4] + "%" + hex((int)(subStr[5:8]))[2:4]                    if length == len12 :                        ret += "%" + hex((int)(subStr[1:4]))[2:4] + "%" + hex((int)(subStr[5:8]))[2:4] + "%" + hex((int)(subStr[9:12]))[2:4]                    location = location + length               else :                    ret += s[location :location + 1]                    location = location + 1          else :               ret += s[location:]               break        ret = urllib.unquote(ret)      if ret == s : return s             try :          if length == len8 :               return ret.decode('GBK')          if length == len12 :               return ret.decode('UTF-8')       except UnicodeDecodeError:          return ret      def check(s):      if len(s) != len8 and len(s) != len12:          return False        if s[0] != '_' or s[4] != '_' :          return False        if len(s) == len12 and s[8] != '_':          return False         s = s.replace('_','')      for c in s :          if (c not in sNum) :return False             return True convert()    |