6.4.2 案例精选

  1 将当前目录的所有扩展名为html的文件重命名为扩展名为htm的文件。

 1 file_list = os.listdir(‘.‘)   #获取当前目录下的文件列表
 2 for filename in file_list:
 3     pos = filename.rindex(‘.‘)
 4     if filename[pos+1:] == ‘html‘:
 5         newname=filename[:pos + 1] + ‘htm‘
 6         os.rename(filename,newname)
 7         print(filename + ‘更名为:‘ + newname)
 8
 9 #下面的代码可能更简洁一点
10 file_list = [filename for filename in os.listdir(‘.‘) if filename.endswith(‘html‘)]
11 for name in file_list:
12     newname = name[:-4] + ‘htm‘
13     os.rename(name,newname)
14     print(filename + ‘更名为:‘ + newname)

  2 计算文件侧CRC32值

 1 import sys
 2 import zlib
 3 import os.path
 4
 5 filename = sys.argv[0]   #第一个参数是文件名
 6 if os.path.isfile(filename):
 7     fp = open(filename,‘rb‘)
 8     contents = fp.read()
 9     fp.close()
10     print(zlib.crc32(contents.encode()))
11 else:
12     print(‘file not exists‘)

  

  拓展知识:CRC又称循环冗余检查吗,常用于数据存储和通信领域,具有极强的检错能力。CRC32产生校验值时源数据快的每一个bit(位)都参与了计算,所以数据块中即使只有一位发生了变化,也会得到不同的CRC32值,也可用于文件完整性保护。

  3 判断一个文件是否为GIF图像文件。任何一种文件都具有专门的文件头结构,在文件头中存放了大量的信息,其中就包括该文件的类型。通过文件头信息来判断文件类型的方法可以得到更加准确的信息,而不依赖于文件扩展名。

1 def is_gif(fname):
2     f = open(fname,‘r‘)
3     first4 = tuple(f.read(4))
4     f.close()
5     print(first4)
6     return first4 == (‘G‘,‘I‘,‘F‘,‘8‘)
7
8 print(is_gif(‘test.gif‘))

  4 编程程序,进行文件夹增量备份

  程序功能与用法:指定源文件夹与目标文件夹,自动检测自上次备份以来源文件夹中内容的改变,包括修改的文件、新建的文件、新建的文件夹等,自动复制新增或修改过的文件到目标文件夹中,自上次备份以来没有修改过的文件将被忽略而不复制,从而实现增量备份。本例属于系统运维的范畴。

 1 import os
 2 import filecmp
 3 import shutil
 4 import sys
 5
 6 def autoBackup(scrDir,dstDir):
 7     if ((not os.path.isdir(scrDir)) or (not os.path.isdir(dstDir))
 8         or (os.path.abspath(scrDir) != scrDir) or (os.path.abspath(dstDir) != dstDir)):
 9         usage()
10
11     for item in os.listdir(scrDir):
12         scrItem = os.path.join(scrDir,item)
13         dstItem = scrItem.replace(scrDir,dstDir)
14
15         if os.path.isdir(scrItem):
16             #创建新增的文件夹,保证目标文件夹的结构与原始文件夹一致
17
18             if not os.path.exists(dstItem):
19                 os.makedirs(dstItem)
20                 print(‘make directory‘,dstItem)
21
22             #递归调用自身函数
23             autoBackup(scrDir,dstDir)
24
25         elif os.path.isfile(scrItem):
26             #只复制新增或修改过的文件
27             if ((not os.path.exists(dstItem)) or (not filecmp.cmp(scrItem,dstItem,shallow=False))):
28                 shutil.copyfile(scrItem,dstItem)
29                 print(‘file:‘ + scrItem + ‘==>‘ + dstItem)
30
31 def usage():
32     print(‘scrDir and dstDir must be existing absolute path of certain directory‘)
33     print(‘For example:{0} c:\\olddir c:\\newdir‘.format(sys.argv[0]))
34     sys.exit(0)
35
36
37 if __name__ == ‘__main__‘:
38     if len(sys.argv) != 3:
39         usage()
40     scrDir,dstDir = sys.argv[1],sys.argv[2]
41     autoBackup(scrDir,dstDir)

  5 编写程序,统计指定文件夹大小以及文件和子文件夹数量。本例也属于系统运维范畴,可用于磁盘配额的计算,例如 E-mail、博客、FTP、快盘等系统中每个账号所占空间大小的统计。

 1 import os
 2
 3 totalSize = 0
 4 fileNum = 0
 5 dirNum = 0
 6
 7 def visitDir(path):
 8
 9     global totalSize
10     global fileNum
11     global dirNum
12
13     for lists in os.listdir(path):
14         sub_path = os.path.join(path,lists)
15         if os.path.isfile(sub_path):
16             fileNum +=  1                             #统计文件数量
17             totalSize += os.path.getsize(sub_path)    #统计文件总大小
18
19         elif os.path.isdir(sub_path):
20             dirNum += 1                               #统计子文件的数量
21             visitDir(sub_path)                        #递归统计子文件夹
22
23 def main(path):
24     if not os.path.isdir(path):
25         print(‘Error:"‘,path,‘" is not a directory or does not exist.‘)
26         return
27
28     visitDir(path)
29
30 #单位换算函数
31 def sizeConvert(size):
32     K,M,G = 1024,1024 ** 2,1024 ** 3
33     if size >= G:
34         return ‘{:.4f}‘.format(size / G) + ‘ G Bytes‘
35
36     elif size >= M:
37         return ‘{:.4f}‘.format(size / M) + ‘ M Bytes‘
38
39     elif size >= K:
40         return ‘{:.4f}‘.format(size / K) + ‘ K Bytes‘
41     else:
42         return str(size) + ‘Bytes‘
43
44 def output(path):
45     print(‘The total size of {}  is: {}  ({} Bytes)‘.format(path ,sizeConvert(totalSize),totalSize))
46     print(‘The total number of files in ‘ + path + ‘ is:‘,fileNum)
47     print(‘The total number of directories in ‘ + path + ‘ is:‘,dirNum)
48
49 if __name__ == ‘__main__‘:
50     path = os.getcwd()
51     main(path)
52     output(path)
53
54 ‘‘‘
55 The total size of C:\Users\dddd\...Python\Python35  is: 159.8924 M Bytes  (167659363 Bytes)
56 The total number of files in C:\Users\dddd\...Python\Python35 is: 6437
57 The total number of directories in C:\Users\dddd\...Python\Python35 is: 624
58 ‘‘‘

  6 编写程序,递归删除指定文件夹中指定类型的文件。

  本例代码也属于系统运维范畴,可用于清理系统中的临时垃圾文件或其他指定类型的文件,稍加扩展还可以删除大小为0字节的文件,大家可以自行补充和完成。

 1 from os.path import isdir,join,splitext
 2 from os import remove,listdir
 3
 4 #指定要删除的文件类型
 5 filetypes = [‘.tmp‘,‘.log‘,‘.obj‘,‘.txt‘]
 6
 7 def delCertainFiles(directory):
 8
 9     if not isdir(directory):
10         print(‘应该输入路径‘)
11         return
12
13     for filename in listdir(directory):
14         print(3)
15
16         temp = join(directory,filename)
17
18         if isdir(temp):
19             delCertainFiles(temp)
20
21         elif splitext(temp)[1] in filetypes:
22             print(5)
23             remove(temp)
24             print(temp,‘deleted...‘)
25
26 if __name__ == ‘__main__‘:
27     directory = r‘E:\test‘
28     #directory = sys.argv[1]
29     delCertainFiles(directory)

  如果文件夹中有带特殊属性的文件或子文件夹,上面的代码可能会无法删除带特殊属性的文件,利用Python扩展pywin32可以解决该问题。

 1 import win32con
 2 import win32api
 3 import os
 4 from win32con import FILE_ATTRIBUTE_NORMAL
 5
 6 def del_dir(path):
 7     for file in os.listdir(path):
 8         file_or_dir = os.path.join(path,file)
 9         if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):
10             del_dir(file_or_dir)
11
12         else:
13             try:
14                 os.remove(file_or_dir)    #尝试删除该文件
15             except:
16                 win32api.SetFileAttributes(file_or_dir,FILE_ATTRIBUTE_NORMAL)   #修改文件属性,设置为普通文件,再次删除
17                 os.remove(file_or_dir)
18
19     os.rmdir(path)   #删除文件夹
20
21 del_dir(r‘E:\test‘)

  7 使用扩展库 openpyxl 读写 Excel 2007 以及更高版本的Excel 文件。

 1 import openpyxl
 2
 3 from openpyxl import Workbook
 4
 5 fn = r‘C:\Users\dddd\Desktop\aa.xlsx‘   #文件名
 6 wb = Workbook()                         #创建工作簿
 7 ws = wb.create_sheet(title=‘你好‘)      #创建工作表
 8 ws[‘A1‘] = ‘这是第一个单元格‘             #单元格复制
 9 ws[‘B1‘] = ‘3.1415926‘
10 wb.save(fn)                             #保存Excel
11
12 wb = openpyxl.load_workbook(fn)         #打开指定索引的工作表
13 ws = wb.worksheets[1]                   #打开第二个sheet页
14 print(ws[‘A1‘].value)                   #读取并输出指定单元格的值
15 ws.append([1,2,3,4,5])                  #添加一行数据
16 ws.merge_cells(‘F2:F3‘)                 #合并单元格
17 ws[‘F2‘] = "=sum(A2:E2)"                #写入公式
18
19 for r in range(10,15):
20     for c in range(3,8):
21         _=ws.cell(row=r,column=c,value=r*c)  #写入单元格数据
22 wb.save(fn)

  假设某学校所有课程每学期允许多次考试,学生可随时参加考试,系统自动将每次成绩添加到Excel文件(包含 3 列:姓名、课程、成绩)中,现期末要求统计所有学生每门课程的最高成绩。下面的代码首先模拟生成随机成绩数据,然后进行统计分析。

 1 import openpyxl
 2 from openpyxl import Workbook,load_workbook
 3 import random
 4
 5 def generateRandomInformation(filename):
 6     workbook = Workbook()
 7     worksheet = workbook.worksheets[0]
 8
 9     worksheet.append([‘姓名‘,‘课程‘,‘成绩‘])
10
11     #中文名字中的第一、第二、第三个字
12     first = tuple(‘赵钱孙李‘)
13     middle = tuple(‘为为为为‘)
14     last = tuple(‘坤燕只‘)
15
16     #课程名称
17     subjects = (‘语文‘,‘数学‘,‘英语‘)
18
19     #数据生成200个数据
20     for i in range(200):
21         line = []
22         r = random.randint(1,100)
23         name = random.choice(first)
24
25         #按一定概率生成只有两个字的中文名字
26
27         if r > 50:
28             name += random.choice(middle)
29         name += random.choice(last)
30
31         #依次生成姓名、课程名称和成绩
32         line.append(name)
33         line.append(random.choice(subjects))
34         line.append(random.randint(0,100))
35
36         worksheet.append(line)
37
38     #保存数据,申城EXCEL 2007格式的文件
39     workbook.save(filename)
40
41 #generateRandomInformation(r‘C:\Users\dddd\Desktop\aaa.xlsx‘)  #这行代码执行一次就可以了
42
43 def getResult(oldfile,newfile):
44
45     #用于存放结果数据的字典
46     result = dict()
47
48     #打开原始数据
49     workbook = load_workbook(oldfile)
50     worksheet = workbook.worksheets[0]
51
52     #遍历原始数据
53     #跳过第0行的表头
54     for row in worksheet.rows[1:]:
55
56         #姓名、课程名称、本次成绩
57         name,subject,grade = row[0].value,row[1].value,row[2].value
58
59         #获取当前姓名对应的课程名称和成绩信息
60
61         #如果result字典中不包含,则返回空字典
62         t = result.get(name,{})
63
64         #获取当前学生当前课程的成绩,若不存在返回0
65         f = t.get(subject,0)
66
67         #只保留该学生该课程的最高成绩
68         if grade > f:
69             t[subject] = grade
70             result[name] = t
71
72     #创建Excel文件
73     workbook1 = Workbook()
74     worksheet1 = workbook1.worksheets[0]
75     worksheet1.append([‘姓名‘,‘课程‘,‘成绩‘])
76
77     #将result 字典中的结果数据写入 Excel 文件
78     for name,t in result.tiems():
79         for subject,grade in t.items():
80             worksheet1.append([name,subject,grade])
81     workbook1.save(newfile)
82
83 if __name__ == ‘__main__‘:
84     oldfile = r‘C:\Users\dddd\Desktop\aaa.xlsx‘
85     newfile = r‘C:\Users\dddd\Desktop\aaaa.xlsx‘
86
87     getResult(oldfile,newfile)

  8 编写代码,查看指定ZIP和RAR压缩文件中的文件列表。

  Python标准库zipfile提供了对ZIP和APK文件的访问。

1 import zipfile
2 fp = zipfile.ZipFile(r‘‘)
3 for f in fp.namelist():
4     print(f)
5 fp.close()

  Python扩展库rarfile(可通过pip工具进行安装)提供了对RAR文件的访问。

1 import rarfile
2 r = rarfile.RarFile(r‘‘)
3 for f in r.namelist():
4     print(f)
5 r.close()

  9 把记事本文件 test.txt转换成 Excel 2007 + 文件,假设test.txt文件中国第一行为表头,从第二行开始是实际数据,并且表头和数据航中的额不同字段信息都是用逗号分隔。

 1 from openpyxl import Workbook
 2
 3 def main(txtFileName):
 4     new_XlsFileName = txtFileName[:-3] + ‘xlsx‘
 5
 6     wb = Workbook
 7     worksheet = wb.worksheets[1]
 8
 9     with open(txtFileName) as fp:
10         for line in fp:
11             line = line.strip().split(‘,‘)
12             worksheet.append(line)
13         wb.save(new_XlsFileName)
14
15 main(‘infomation.txt‘)
16
17 ‘‘‘
18 Traceback (most recent call last):
19   File "C:/Users/dddd/AppData/Local/Programs/Python/Python35/test1.py", line 15, in <module>
20     main(‘infomation.txt‘)
21   File "C:/Users/dddd/AppData/Local/Programs/Python/Python35/test1.py", line 7, in main
22     worksheet = wb.worksheets[1]
23 TypeError: ‘property‘ object is not subscriptable
24 ‘‘‘

原文地址:https://www.cnblogs.com/avention/p/8797451.html

时间: 2024-11-09 05:57:32

6.4.2 案例精选的相关文章

如何打造超火爆小程序 酷客多优秀案例精选推荐

2018年,大批企业纷纷做起微信小程序.面对小程序掀起的惊涛骇浪,酷客多扶摇直上,席卷国内外小程序市场.为众多企业精心打造营销利器,解决了大量传统企业经营上的困难和问题. 如今,作为国内首屈一指的微信小程序技术服务商,酷客多已拥有数十万的客户商家.其中高品质案例数不胜数,今天为大家分享一批优秀模板案例,供大家参考评鉴. 原文地址:http://blog.51cto.com/smartlife/2149621

5.1.3 案例精选

5-1 编写函数实现字符串加密和解密,循环使用指定秘钥,采用简单的异或算法. 1 def crypt(source,key): 2 from itertools import cycle 3 result = '' 4 temp=cycle(key) 5 6 for ch in source: 7 result = result + chr( ord(ch)^ord(next(temp)) ) 8 9 return result 10 11 source = 'Shandong Institut

二值图像分析案例精选

说起来,我还是挺惭愧的,去年四月份连续在51CTO博客发表了一波技术文章,后来因为自己太忙就慢慢忘记更新拉,前两天一看访问量居然突破100+万拉,感谢各位的厚爱与支持,更觉得51CTO博客改版之后真的是很棒!所以又来更新了! 最近一直有人向我提问很多二值图像分析相关的问题,特别选择了两个典型的轮廓分析问题.进行分析与编码实现与演示,废话不多说,先看第一个问题. 问题一 问题描述如下 想找到工具盘中间缺少的几个点,统计出可以看到的工件数目 仔细分析图像发现,中间都毫无另外的有个白色很亮的圆圈,这个

C++游戏开发需要阅读的书籍

如果要自学游戏程序开发的话,可以看看下面的,呵呵. 游戏开发资料(PDF书都是中文版的,非英文,很多是本人自己扫描制作,从未网上发布过,所以独家啦):  1.Gamebryo 2.2游戏引擎(盛大.腾讯等公司制作网络游戏常用)+Gamebryo v2.2.1说明文档 2.游戏PDF书及其代码:  3D游戏编程.3D游戏编程大师技巧.Direct3D游戏编程入门教程第2版.DirectX角色扮演游戏编程  DirectX特效游戏程序设计.MFC windows程序设计第2版.MFC深入浅出.VC+

网络编程学习小结

几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的差别: 1)  ISAPI主要是开发基于浏览器client与server端程序.效率比CGI方式高,并且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2)  CGI主要是开发基于浏览器client与server端程序.(基于TCP/IP模型中的应用层) 3)  WinInet主要是开发client程序.(基于TCP/IP模型中的应用层) 4)  Winsock主要是基于socket来开发clie

即时通讯软件开发 几种网络编程方式

即时通讯软件开发 几种网络编程方式: ISAPI.CGI.WinInet.Winsock 它们之间的区别: 1)ISAPI主要是开发基于浏览器客户端与服务器端程序.效率比CGI方式高,而且也扩展了CGI没有的一些功能.(基于TCP/IP模型中的应用层) 2) CGI主要是开发基于浏览器客户端与服务器端程序.(基于TCP/IP模型中的应用层) 3) WinInet主要是开发客户端程序.(基于TCP/IP模型中的应用层) 4) Winsock主要是基于socket来开发客户端与服务器端程序.(基于T

软件需求说明书

1引言 1.1编写目的 1.2背景 1.3定义 1.4参考资料 2任务概述 2.1目标 2.2用户的特点 2.3假定和约束 3需求规定 3.1对功能的规定 3.2对性能的规定 3.2.1精度 3.2.2时间特性要求 3.2.3灵活性 3.3输人输出要求 3.4数据管理能力要求 3.5故障处理要求 3.6其他专门要求 4运行环境规定 4.1设备 4.2支持软件 4.3接口 4.4控制 软件需求说明书 1引言 1.1编写目的 (1)为了更好的了解软件的需求,该文档可供用户浏览,了解海法内容和各部分模

GuidelinesOfGameDevelopment游戏开发新手指引

# GuidelinesOfGameDevelopment Just give out some experience or directions on game development to green hands.分享经验或路线给新手们 正文:最新指引链接 游戏类型:手游.端游.页游.家用游戏(电视) 游戏相关职位: 客户端: 游戏逻辑(常见功能和特色功能开发),将用户体验做到极致,未来方向应该是主程.游戏制作人和游戏玩法创新.C#或Lua.js.我想说,让Lua滚出游戏界,算了,还是我退出

2012Android开发热门资料(110个)

下载中心完整附件下载地址:http://down.51cto.com/data/412494 附件内容部分预览: 专题推荐: Android控:平板电脑HD精品游戏软件合集(共32个) http://down.51cto.com/zt/413 Android游戏引擎源码下载(7个) http://down.51cto.com/zt/412 Android应用实战:淘宝网手机客户端全程实录(10集全) http://down.51cto.com/zt/390 多款Android播放器源码集锦(共1