引言

  • 我又双叒叕的来啦,新博客的第二篇文章,这次是继之前公众号上每日一练的第二个,这次是专题实对于文件的一些处理的练习
  • 主要有以下几类:

    1、实现英文文章字频统计

    2、统一剪裁某一指定目录下的所有图片的分辨率

    3、代码行数统计(包括注释行数、空行数、代码总行数)

字频统计

  • 这里我是参考的《Python变成快速上手--让繁琐工资自动化》中的一种写法,采用字典的setdefault函数实现了单词出现次数的记录,这里简要讲解一下这个方法:
  • setdefault()这个方法有两个参数,第一个是字典的某个键,第二个是如果这个键值不存在的话,设置的默认值,这个方法的作用很好的帮我们解决了,对于想设置字典中不存在的键值时的问题
  • 下面来简要分析一下解决这个问题的大致思路,首先要有一个用于存放统计数据的空字典,其次要给它里面的键设置默认值,因为一开始没有任何键值,所以这里用setdefault()就能解决了
  • 代码示例:
#-*- coding:utf-8 -*-
# Author:Konmu
# 任一个英文的纯文本文件,统计其中的单词出现的个数。 import re
f=open('C:/xxxx.txt','r')
data=f.read() punctuations=r'["!,.?"]+'
'''
由于英文文章中也还是包含有标点,但是在后续分割时会发现由于标点和单词之间并没有空格所以也会被当作
单词的一部分,这是我们所不希望的,所以要先设立要去除的标点
'''
data=re.sub(punctuations,'',data)
data=data.split(' ')
#通常我们写英文作文时都会有的习惯,每个单词之间使用
#空格分开,所以可以根据此将每个单词分割开来
count={}
total=0 for alpha in data:
count.setdefault(alpha,0)
count[alpha] = count[alpha] + 1 for i in count:
total+=count[i] print('each words:'+'\n',count)
print('total_number:'+'\n',total)

分辨率设置

  • 当我们在使用一些图片的时候,可能会遇到图片分辨率和屏幕不适配的问题,这时就要想办法批量设置这些图片的分辨率
  • 解决这个问题用到的还是之前的PIL库的函数thumbnail(),此函数是制作当前图片的缩略图, 参数size指定了图片的最大的宽度和高度,其接收的参数是一个二元元组(x,y)分别指定缩略图的宽高
  • 代码示例:
#-*- coding:utf-8 -*-
# Author:Konmu
# 你有一个目录,装了很多照片,把它们的尺寸变成指定分辨率的大小。
import os
from PIL import Image file_path='C:/xxx'
image_file=os.listdir(file_path)
save_path='C:/xxx/output{}.jpg'
count=0 for i in image_file:
im=Image.open(file_path+i)
im.thumbnail((1136,640))#关键的缩略图裁剪函数
for j in range(len(image_file)):
count+=1
im.save(save_path.format(count))
break

代码行数统计

  • 由于我习惯直接用IDLE编写python,然而它本身并不带有自动的代码行数记录,所以这个代码练习可以实现最简单的代码行数记录。
  • 这里有几个地方要注意的,对于注释行,我是通过判断注释符"#"是否在行中进行的判断记录,对于空白行,是直接利用isspace()函数可以直接解决,而所有的代码行统计直接记录打开文件的长度就解决啦,是不是很简单呢,O(∩_∩)O
  • 代码示例:
# -*- coding:utf-8 -*-
# Author : 代码字数统计
# 每日一练:第 0007 题: 有个目录,里面是你自己写过的程序,
# 统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 num_empty=0
num_note=0 f=open('C:/xxx.py','r',encoding ='utf-8') data=f.readlines()#读取文件所有内容
count = len(data)
print('Total count of Codes: ',count) pattern1='#' #匹配注释符,用于统计注释 for i in range(count):
if(pattern1 in data[i]):
num_note += 1
elif(data[i].isspace()):#匹配空行
num_empty += 1
else:
pass print('num_note: ', num_note)
print('num_empty: ',num_empty)
f.close()
  • 几个注意点:

    1、对于readlines的讲解:由于这个函数是直接读取所有的文件内容,所以一般不对大文件进行操作,若要是处理大文件可以考虑换用readline()函数

    2、当文件中含有中文字符时,读取文件要加上encoding参数,encoding='utf-8'

总结

  • 这次的几个练习,对于文件的操作有了更进一步的掌握,其中有些功能的实现,在编写时还是有些繁杂,后续还可以进一步完善,以实现更丰富的功能

最新文章

  1. javaScript AJAX
  2. Extnet Direct 提交后台事件文件下载设置
  3. google map 计算地图面积方法
  4. 重温布局(display)
  5. 跟着百度学PHP[4]-OOP面对对象编程-1-什么是面对对象编程
  6. 百度ueditor代码高亮显示
  7. iOS运行时 -- Runtime(摘抄自网络)
  8. The Ninth Hunan Collegiate Programming Contest (2013) Problem H
  9. 重新安装Ubuntu12.04
  10. Android SDCard Mount 流程分析
  11. Hashmat the brave warrior - UVa10055
  12. 如何在电脑上配置两个tomcat
  13. Linux 远程工具Screen 的应用
  14. Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals)
  15. python中换行,'\r','\n'及'、'\r\n'
  16. NodeJS + React + Webpack + Echarts
  17. jvm参考网页
  18. Go基础知识
  19. ASP.NET MVC加载ASCX之后,并为之赋值
  20. JS框架图

热门文章

  1. python(open 文件)
  2. 题目分享T
  3. python文件路径分隔符的详细分析
  4. Java——Java泛型
  5. 【FreeRTOS学习02】源码结构/数据类型/命名规则总结
  6. Git上传文件、文件夹到github
  7. Python --函数学习2
  8. ScrollView 内嵌百度地图问题解决
  9. 《C程序设计语言》 练习3-3
  10. Windows 系统如何安装 Docker