鱼C论坛

 找回密码
 立即注册
查看: 2847|回复: 5

[已解决]请问 index = pos 那一行是什么意思呢,大佬能详细的解释一下吗?

[复制链接]
发表于 2020-7-15 22:53:35 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 孜然爱爱 于 2020-7-15 22:55 编辑

  1. def get_suffix(filename, has_dot=False):

  2.     """
  3.     获取文件名的后缀名

  4.     :param filename: 文件名
  5.     :param has_dot: 返回的后缀名是否需要带点
  6.     :return: 文件的后缀名
  7.     """
  8.     pos = filename.rfind('.')
  9.     if 0 < pos < len(filename) - 1:
  10.         index = pos if has_dot else pos + 1
  11.         return filename[index:]
  12.     else:
  13.         return ''
复制代码


这个代码除了    pos = filename.rfind('.') 看明白了之外其他的都不太懂
请大神们解答一下,万分感谢!!
最佳答案
2020-7-15 23:09:58
[b]



这里的 has_dot 参数就是为了返回的后缀是否带 .

当 has_dot 为 True 时候,返回的后缀带 .   比如  .txt    .py

当 has_dot 为 False 时候,返回的后缀不带 .   比如  txt    py

  1. def get_suffix(filename, has_dot=False):

  2.     """
  3.     获取文件名的后缀名

  4.     :param filename: 文件名
  5.     :param has_dot: 返回的后缀名是否需要带点
  6.     :return: 文件的后缀名
  7.     """
  8.     pos = filename.rfind('.')     # 从右往左获取 . 的位置参数
  9.     if 0 < pos < len(filename) - 1:  # 只要有找到 . 返回的值一定大于 -1
  10.         index = pos if has_dot else pos + 1 # 三元运算符,如果 has_dot 为 True ,那么返回 pos ,反之返回 pos + 1
  11.         # 其实这个参数的作用就是是否保留 . 如果index = pos + 1 那么就不保留 . 反之如果返回的是 index = pos 那么保留 .
  12.         return filename[index:]   
  13.         # 返回后缀,当 has_dot 参数为 True 时候返回带 . 的后缀
  14.         # 当 has_dot 参数为 False 时候返回不带 . 的后缀
  15.     else:
  16.         return ''  # 这个就是当 pos = -1的时候 也就是没找到 . 也就没有文件后缀,返回空字符串
复制代码



[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-15 23:09:58 | 显示全部楼层    本楼为最佳答案   
[b]



这里的 has_dot 参数就是为了返回的后缀是否带 .

当 has_dot 为 True 时候,返回的后缀带 .   比如  .txt    .py

当 has_dot 为 False 时候,返回的后缀不带 .   比如  txt    py

  1. def get_suffix(filename, has_dot=False):

  2.     """
  3.     获取文件名的后缀名

  4.     :param filename: 文件名
  5.     :param has_dot: 返回的后缀名是否需要带点
  6.     :return: 文件的后缀名
  7.     """
  8.     pos = filename.rfind('.')     # 从右往左获取 . 的位置参数
  9.     if 0 < pos < len(filename) - 1:  # 只要有找到 . 返回的值一定大于 -1
  10.         index = pos if has_dot else pos + 1 # 三元运算符,如果 has_dot 为 True ,那么返回 pos ,反之返回 pos + 1
  11.         # 其实这个参数的作用就是是否保留 . 如果index = pos + 1 那么就不保留 . 反之如果返回的是 index = pos 那么保留 .
  12.         return filename[index:]   
  13.         # 返回后缀,当 has_dot 参数为 True 时候返回带 . 的后缀
  14.         # 当 has_dot 参数为 False 时候返回不带 . 的后缀
  15.     else:
  16.         return ''  # 这个就是当 pos = -1的时候 也就是没找到 . 也就没有文件后缀,返回空字符串
复制代码



[/b]
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 23:31:32 | 显示全部楼层
请问大佬:从那面的index可知,rfind('.')应该是从左往右 ‘.’ 的位置数,那为什么说是从右往左获取 . 的位置参数呢?
比如我有一个文件名是1234567.py,从右往左获取 . 的位置不就是2了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-15 23:32:44 | 显示全部楼层
Twilight6 发表于 2020-7-15 23:09
这里的 has_dot 参数就是为了返回的后缀是否带 .

当 has_dot 为 True 时候,返回的后缀带 .    ...


请问大佬:从那面的index可知,rfind('.')应该是从左往右 ‘.’ 的位置数,那为什么说是从右往左获取 . 的位置参数呢?
比如我有一个文件名是1234567.py,从右往左获取 . 的位置不就是2了吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-15 23:54:00 | 显示全部楼层
孜然爱爱 发表于 2020-7-15 23:32
请问大佬:从那面的index可知,rfind('.')应该是从左往右 ‘.’ 的位置数,那为什么说是从右往左获取 . ...



位置参数都是固定的,而不是看你是哪个开始算起的,位置参数都是从左往右正索引从 0 开始

负数索引从右往左 -1 开始
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-16 09:43:25 | 显示全部楼层
Twilight6 发表于 2020-7-15 23:54
位置参数都是固定的,而不是看你是哪个开始算起的,位置参数都是从左往右正索引从 0 开始

负数索 ...

明白啦,谢谢大神!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 16:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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