zoukankan      html  css  js  c++  java
  • 文件名称排序 字符串序+数字序 python

    # -*-coding:utf8-*-
    
    """
    基于字符串数字混合排序的Python脚本
    """
    
    
    def is_number(s):
        try:
            float(s)
            return True
        except ValueError:
            pass
    
        try:
            import unicodedata
            unicodedata.numeric(s)
            return True
        except (TypeError, ValueError):
            pass
    
        return False
    
    
    def find_continuous_num(astr, c):
        """
    
        :param astr: a string
        :param c: where to start looking for
        :return: num: int
        """
        num = ''
        try:
            while not is_number(astr[c]) and c < len(astr):
                c += 1
            while is_number(astr[c]) and c < len(astr):
                num += astr[c]
                c += 1
        except:
            pass
        if num != '':
            return int(num)
    
    
    def comp2filename(file1, file2):
        """
        compare 2 filename:
        if the prev part of 2 strings are the same, compare the next continuous number
        file1 < file2 : return True, otherwise False
        :param file1:
        :param file2:
        :return:
        """
        smaller_length = min(len(file1), len(file2))
        continuous_num = ''
        for c in range(0, smaller_length):
            if not is_number(file1[c]) and not is_number(file2[c]):
                # print('both not number')
                if file1[c] < file2[c]:
                    return True
                if file1[c] > file2[c]:
                    return False
                if file1[c] == file2[c]:
                    if c == smaller_length - 1:
                        # print('the last bit')
                        if len(file1) < len(file2):
                            return True
                        else:
                            return False
                    else:
                        continue
            if is_number(file1[c]) and not is_number(file2[c]):
                return True
            if not is_number(file1[c]) and is_number(file2[c]):
                return False
            if is_number(file1[c]) and is_number(file2[c]):
                if find_continuous_num(file1, c) < find_continuous_num(file2, c):
                    return True
                else:
                    return False
        # if file1 < file2:
        #     return True
        # else:
        #     return False
    
    
    def sort_insert(lst):
        """
        simple insert sort
        :param lst:
        :return:
        """
        for i in range(1, len(lst)):
            x = lst[i]
            j = i
            while j > 0 and lst[j-1] > x:
            # while j > 0 and comp2filename(x, lst[j-1]):
                lst[j] = lst[j-1]
                j -= 1
            lst[j] = x
        return lst
    
    
    def sort_insert_filename(lst):
        """
        simple insert sort
        :param lst:
        :return:
        """
        for i in range(1, len(lst)):
            x = lst[i]
            j = i
            # while j > 0 and lst[j-1] > x:
            while j > 0 and comp2filename(x, lst[j-1]):
                lst[j] = lst[j-1]
                j -= 1
            lst[j] = x
        return lst
    
    
    def file_name_sort(all_file_list):
        """
    
        :param all_file_list: list
        :return: new_list:list
        """
        new_list = []
        # all_file_list.sort(key=lambda x: int(x.split('.')[0].split('_')[2]))
        # for file in all_file_list:
        #     pass
    
        return new_list
    
    
    if __name__ == "__main__":
        print(sort_insert_filename(['a09', 'a2', 'b2', 'a10','a100', 'a01', 'a010', '_a3', 'a893', 'a90']))
    
    
    
  • 相关阅读:
    [Swift]LeetCode241. 为运算表达式设计优先级 | Different Ways to Add Parentheses
    [Swift]LeetCode240. 搜索二维矩阵 II | Search a 2D Matrix II
    使用ADO.NET对SQL Server数据库进行訪问
    JavaScript中面向对象那点事
    总结文件操作函数(二)-C语言
    UVa
    深入研究java.lang.Object类
    TCP/IP具体解释--TCP/IP可靠的原理 滑动窗体 拥塞窗体
    W5500EVB UDP模式的測试与理解
    仿新浪首页、主题、详情页,纯html静态页面
  • 原文地址:https://www.cnblogs.com/theodoric008/p/7986254.html
Copyright © 2011-2022 走看看