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

需求:
某文件系统目录下有一系列文件:
quickshort.c
graph.py
heap.java
install.sh
stack.cpp
...
编写程序给其中的所有.py和.sh结尾的文件加上用户可执行权限

思路:
使用str.startswith()和str.endswith()方法
(注意多个匹配时,参数使用元组)

代码:

>>> fn = 'aaa.py'

>>> fn.endswith('.py')
True

>>> fn.endswith('.c')
False

>>> fn.endswith(('.py','.sh'))
True

>>> ls
a.c  b.py  c.java  d.sh  e.cpp  h.asm

>>> os.listdir('.')
['d.sh', 'c.java', 'e.cpp', 'h.asm', 'b.py', 'a.c']

>>> d = os.listdir('.')

>>> os.stat('b.py')
os.stat_result(st_mode=33188, st_ino=536578, st_dev=66312, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1604280862, st_mtime=1604280862, st_ctime=1604280862)

>>> s = os.stat('b.py')

>>> s
os.stat_result(st_mode=33188, st_ino=536578, st_dev=66312, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1604280862, st_mtime=1604280862, st_ctime=1604280862)

>>> s.st_mode
33188

>>> ls -l b.py
-rw-r--r-- 1 richardo richardo 0 11月  2 09:34 b.py

>>> oct(s.st_mode)
'0o100644'

>>> s.st_mode | 0o100
33252

>>> oct(s.st_mode | 0o100)
'0o100744'

>>> oct(0o100)
'0o100'

>>> oct(0o100644 | 0o100)
'0o100744'

>>> 0o100644 | 0o100
33252

>>> oct(s.st_mode | s.st_mode)
'0o100644'

>>> s.st_mode
33188

>>> s
os.stat_result(st_mode=33188, st_ino=536578, st_dev=66312, st_nlink=1, st_uid=1000, st_gid=1000, st_size=0, st_atime=1604280862, st_mtime=1604280862, st_ctime=1604280862)

>>> os.chmod('b.py',s.st_mode | 0o100)

>>> ll
总用量 0
-rw-r--r-- 1 richardo 0 11月  2 09:34 a.c
-rwxr--r-- 1 richardo 0 11月  2 09:34 b.py*
-rw-r--r-- 1 richardo 0 11月  2 09:34 c.java
-rw-r--r-- 1 richardo 0 11月  2 09:34 d.sh
-rw-r--r-- 1 richardo 0 11月  2 09:34 e.cpp
-rw-r--r-- 1 richardo 0 11月  2 09:34 h.asm

>>>  import stat

>>> stat.S_IXUSR
64

>>> for fn in os.listdir():
...     if fn.endswith(('.py','.sh')):
...         fs = os.stat(fn)
...         os.chmod(fn,fs.st_mode | stat.S_IXUSR)
... 

>>> ll
总用量 0
-rw-r--r-- 1 richardo 0 11月  2 09:34 a.c
-rwxr--r-- 1 richardo 0 11月  2 09:34 b.py*
-rw-r--r-- 1 richardo 0 11月  2 09:34 c.java
-rwxr--r-- 1 richardo 0 11月  2 09:34 d.sh*
-rw-r--r-- 1 richardo 0 11月  2 09:34 e.cpp
-rw-r--r-- 1 richardo 0 11月  2 09:34 h.asm
posted @ 2020-11-02 10:06  Richardo-M-Lu  阅读(116)  评论(0编辑  收藏  举报