1、如何判断字符串a是否以字符串b开头或结尾?

        (相似问题,如判断某一个网络地址是否以http开头或者ftp开头。)

        示例案例:

    某文件系统目录下有一系列文件:
    quicksort.c
    graph.py
    heap.java
    install.sh
    stack.cpp
    ... ...

        编写程序给其中所有.sh文件和.py文件加上用户可执行权限。

        解决方案:

                使用字符串的str.startswith()和str.endswith()方法。

        注意:多个匹配时参数使用元组。

2、代码演示

# 导入系统调用相关的os模块,文件状态相关的stat模块
import os, stat

# 读入当前路径下的所有的文件名
files = os.listdir('.')
print(files)
# 依次判断列表中每一个项是否以.sh或.py结尾

'''
s.endswith方法介绍:
    S.endswith(suffix[, start[, end]]) -> bool
    str.endswith()接受元组作为参数,满足其中之一返回结果就为真
'''
s = 'g.sh'
print(s.endswith(('.sh', '.py')))

# 使用列表解析把中的.sh和.py文件过滤出来
l = [name for name in os.listdir('.') if name.endswith(('.sh', '.py'))]
print(l)
# 修改其中一个文件权限
# (1)首先读入文件权限,后面跟一个文件路径,返回值中st_mode和权限相关
print(os.stat('03.set_test.py'))
# (2)将st_mode的值转换成八进制数,后三位数就是文件权限
st_mode = os.stat('03.set_test.py').st_mode
print(oct(st_mode))
# (3)得到用户可执行权限验码,然后跟st_mode或操作得到文件最终权限
print(stat.S_IXUSR)
# (4)改变文件权限,第一个参数文件名,第二个参数文件权限
os.chmod('03.set_test.py', st_mode | stat.S_IXUSR)

# 依次迭代每一个文件都进行修改权限操作
for x in l:
    st_mode = os.stat('%s' % x).st_mode
    os.chmod('%s' % x, oct(st_mode) | stat.S_IXUSR)

# 对比一个文件修改前和后的权限变化
-rw-r--r--  1 allard  staff   202 Apr 25 19:33 03.set_test.py
-rwxr--r--  1 allard  staff   202 Apr 25 19:33 03.set_test.py

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐