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']))
    
    
    
  • 相关阅读:
    联想笔记本如何开启笔记本的VT-x虚拟化技术功能
    《Python数据分析》环境搭建之安装Jupyter工具(一)
    SQLite文件查看工具DB Browser for SQLite
    《Python操作SQLite3数据库》快速上手教程
    市面上各类网盘(百度网盘、腾讯微云、亿方云、坚果云等)对比 2016年10月
    Selenium安装失败WebDriverException: Message: 'gechodriver' executable needs to be in PATH
    安装Python环境时遇到的问题
    ORA-12541:TNS没有监听器
    PL/SQL连接Oracle数据库,中文乱码,显示问号
    Selenium 简单的例子
  • 原文地址:https://www.cnblogs.com/theodoric008/p/7986254.html
Copyright © 2011-2022 走看看