Python:总结编程的一些小技巧(二)
1. 统计字符串中汉字和汉字标点符号的个数
# 无需安装其它库
punctuation = '"#$%&'()*+,-/:;<=>@[\]^_`{|}~⦅⦆「」、 、〃〈〉《》「」『』【】〔〕〖〗〘〙〚〛〜〝〞〟〰〾〿–—‘’‛“”„‟…‧﹏﹑﹔·!?。。'
def chinese_length(s):
n = 0
for c in s:
if '\u4e00' <= c <= '\u9fa5': # 中文字符
n = n + 1
if c in punctuation:
n = n + 1
return n
if __name__ == '__main__':
s1 = '123你好,世界。abc'
print(chinese_length(s1))
import re
import zhon.hanzi
def chinese_length(s):
f1 = re.findall('[\u4e00-\u9fa5]', s) # 匹配中文
f2 = re.findall('[{}]'.format(zhon.hanzi.punctuation), s) # 匹配中文标点符号
return len(f1) + len(f2)
if __name__ == '__main__':
s1 = '123你好,世界。abc'
print(chinese_length(s1))
2. 输出文件夹下的文件总数和各个文件名
import os
path = 'E://下载'
dir1 = os.listdir(path)
print(len(dir1), dir1)
3. os.rmdir与os.removedirs的区别
说明:
现E盘有多个文件夹,其中有一个文件夹a。文件夹a下只有一个文件夹,即文件夹b。文件夹b也只有一个文件夹,即文件夹c。文件夹c下无任何文件或文件夹
import os
path = 'E://a//b//c'
os.rmdir(path)
注意:
若执行如上代码,一定要确保文件夹c下无任何文件或文件夹。执行后会删除文件夹c。若文件夹c下有任何文件或文件夹,程序会报错。
import os
path = 'E://a//b//c'
# os.rmdir(path)
os.removedirs(path)
注意:
若执行如上代码,一定要确保文件夹a下只含有文件夹b,文件夹b下只含有文件夹c,文件夹c下无任何文件或文件夹。执行后会删除文件夹c,文件夹b,文件夹a。
其作用相当于:
1. 先用rmdir删除文件夹c,此时文件夹b下无任何文件或文件夹。
2. 再用rmdir删除文件夹b,此时文件夹a下无任何文件或文件夹。
3. 最后用rmdir删除文件夹a,此时E盘下还含有其它文件或文件夹,不可再删除。
若文件夹c下有任何文件或文件夹,则程序报错。若文件夹b下有除文件夹c以外的文件或文件夹,则程序只会删除文件夹c。同理,若文件夹a包含除文件夹b以外的文件或文件夹,程序只会删除文件夹c和文件夹b。故removedirs相当于在路径上从右往左(E://a//b//c -> E://a//b -> E://a -> E:)调用rmdir。
4. 给定路径,删除路径下,大小为0的文件或文件夹
import os
def delete_file_dir(p):
ds = os.listdir(p) # p目录下所有文件和文件目录
for d in ds:
f = p + '//' + d # 文件路径
if os.path.getsize(f) == 0 and os.path.isfile(f): # 空文件
os.remove(f)
if os.path.isdir(f): # 文件夹
delete_file_dir(f) # 递归删除文件夹中空文件和空文件夹
if len(os.listdir(f)) == 0: # 递归删除后,若文件夹变成空文件夹,则删除
os.rmdir(f)
if __name__ == '__main__':
path = 'E://a7'
delete_file_dir(path)