鱼C论坛

 找回密码
 立即注册
查看: 4218|回复: 11

[已解决]如何将文件按中文顺序排序

[复制链接]
发表于 2017-4-10 17:28:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
现有文件:一.txt 二.txt 三.txt 四.txt  如何实现将文件按照中文顺序一二三四进行排序呢?我的想法是可以将汉字数字与1,2,3,4做个字典映射,但是接下来该怎么做我就没有头绪了
微信截图_20170410172731.png
最佳答案
2017-4-10 20:21:59
我写了一个函数,可以批量排序,不过有个问题就是,我只算了一到十,超过十的就要重新设置一个替换的机制,这个涉及到了把中文数字换算成int,需要自己按照中文数字的规律去定义一个函数,有点麻烦我就没弄, 你自己也说道了用字典的方式,所以这个过程你自己去弄吧
我的函数主要在于重命名文件名
  1. import os,os.path

  2. def changename(filename):
  3.     dic = {"一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, "七": 7, "八": 8, "九": 9, "十": 10}
  4.     f = os.listdir(filename)
  5.     print(f)
  6.     for i in f:
  7.         for num in dic:
  8.             if num in i:
  9.                 os.rename(os.path.join(filename, i), os.path.join(filename, str(dic[num])+i))
  10. changename("test")
复制代码

你可以把我这拿去试试,可以得到你要求在文件名前面增加一个数字
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-4-10 17:47:42 | 显示全部楼层
Python直接读取中文路径的文件时失败,可做如下处理:

inpath = 'D:/work/yuanxx/在线导航/驾车导航/walk_log/20130619_172355.txt'
uipath = unicode(ipath , "utf8")

然后用"uipath"经过编码后的路径去open()即可:

fin = open(uipath)


用if判断文件名,你是怎么排序?在idle里打印?
这是会用到的,然后打开文件什么的就不说了吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-10 18:42:47 | 显示全部楼层
新手·ing 发表于 2017-4-10 17:47
Python直接读取中文路径的文件时失败,可做如下处理:

inpath = 'D:/work/yuanxx/在线导航/驾车导航/wa ...

是这样的,我最终想实现的是把文件夹中的文件按中文数字的顺序排列,但是Windows系统肯定不认这种排序,所以我就想着给每一个文件开头都加一个阿拉伯数字,如"01一.txt" “02二.txt”这样把原先的文件名替换掉,间接实现。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 19:06:36 | 显示全部楼层
灵饕餮 发表于 2017-4-10 18:42
是这样的,我最终想实现的是把文件夹中的文件按中文数字的顺序排列,但是Windows系统肯定不认这种排序, ...

还是if啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 19:06:48 | 显示全部楼层

切片判断下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 20:05:16 | 显示全部楼层
enum.IntEnum
  1. >>> import enum
  2. >>> class CN(enum.IntEnum):
  3.     〇,一,二,三,四,五,六,七,八,九,十 = range(11)

  4.    
  5. >>> CN.七 > CN.一
  6. True

  7. >>> for i in CN:
  8.     print(i, i.value)

  9.    
  10. CN.〇 0
  11. CN.一 1
  12. CN.二 2
  13. CN.三 3
  14. CN.四 4
  15. CN.五 5
  16. CN.六 6
  17. CN.七 7
  18. CN.八 8
  19. CN.九 9
  20. CN.十 10

  21. >>> 玖 = '九'
  22. >>> CN[玖].value
  23. 9
  24. >>>
  25. >>> n = ['一', '三', '十', '二', '五', '九', '〇', '六', '四', '七', '八', '二']
  26. >>> sorted(n,key=lambda x:CN[x])
  27. ['〇', '一', '二', '二', '三', '四', '五', '六', '七', '八', '九', '十']
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-10 20:21:59 | 显示全部楼层    本楼为最佳答案   
我写了一个函数,可以批量排序,不过有个问题就是,我只算了一到十,超过十的就要重新设置一个替换的机制,这个涉及到了把中文数字换算成int,需要自己按照中文数字的规律去定义一个函数,有点麻烦我就没弄, 你自己也说道了用字典的方式,所以这个过程你自己去弄吧
我的函数主要在于重命名文件名
  1. import os,os.path

  2. def changename(filename):
  3.     dic = {"一": 1, "二": 2, "三": 3, "四": 4, "五": 5, "六": 6, "七": 7, "八": 8, "九": 9, "十": 10}
  4.     f = os.listdir(filename)
  5.     print(f)
  6.     for i in f:
  7.         for num in dic:
  8.             if num in i:
  9.                 os.rename(os.path.join(filename, i), os.path.join(filename, str(dic[num])+i))
  10. changename("test")
复制代码

你可以把我这拿去试试,可以得到你要求在文件名前面增加一个数字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 13:54:20 | 显示全部楼层

好的,谢谢 我明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 13:55:09 | 显示全部楼层

这段代码我也查到了,不过感觉不太适用。还是谢谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-11 13:55:47 | 显示全部楼层
gopythoner 发表于 2017-4-10 20:21
我写了一个函数,可以批量排序,不过有个问题就是,我只算了一到十,超过十的就要重新设置一个替换的机制, ...

对的,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-4-11 14:03:39 | 显示全部楼层

如果你要排列更多的数字的话,可以看我今天写的一个将中文数字转化成INT的函数,我设定到10000以内都能转化了,如果要更多的话再加一些判断就行了,大概思路就是这样
http://bbs.fishc.com/thread-85579-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-4-13 16:39:03 | 显示全部楼层
gopythoner 发表于 2017-4-11 14:03
如果你要排列更多的数字的话,可以看我今天写的一个将中文数字转化成INT的函数,我设定到10000以内都能转 ...

啊 好的,非常感谢哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-14 12:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表