String模块包含大量使用常量和类,可以用作字符串操作。在下面的程序中会用到一些命令:string.isdigit表示数字0到9的字符串:’0123456789’;string.ascii_letters表示所有的英文大小写字母;string.punctuation表示所有的标点符号;string.isspace表示空白字符‘\t\n\x0b\x0c\r ‘
有了这几个模块之后,我们就可以着手开始写程序啦。我们的具体思路为:1.将word文档的内容导入并保存到list列表中。2.统计每一篇word文档的中文字数,英文字数,空格数,数字个数,标点符号个数。3.获取指定目录下的所有指定后缀的文件名。4.对文件夹内所有的word文档做循环,批量输出结果。
导入所需的模块
import
docx
import string
1.将word文档读入并保存到para_data这个list中
def read_docx(name):
file = docx.Document(name)
para_data = []
for i in range(len(file.paragraphs)):
para_single = file.paragraphs[i].text
para_data.extend(para_single)
return para_data
在上面这个函数中,值得注意的是file.paragraphs,它表示的是得到该文档的所有段落,(file.paragraphs是一个列表,列表中的每个元素均为一个自然段的文字),并将每一个段落内的内容赋值给para_single,最后para_data这个列表中得到的是被分割开的一个一个汉字或者英文字母,便于我们在后续的统计,para_data如下图:
2.找出para_data中的中英文、空格、数字、标点符号个数
def str_count(s):
count_en = count_dg = count_sp = count_zh = count_pu = 0 s_len = len(s)
for c in s:
if c in string.ascii_letters:
count_en += 1
elif c.isdigit():
count_dg += 1
elif c.isspace():
count_sp += 1
elif c.isalpha():
count_zh += 1
else:
count_pu += 1
total_chars = count_zh + count_en + count_sp + count_dg + count_pu
if total_chars == s_len:
return('总字数:{0},中文字数:{1},英文字数:{2},空格:{3},数字数:{4},标点符号:{5}'.format(s_len,count_zh, count_en, count_sp, count_dg, count_pu))
在上面这个函数中,有一个地方值得注意:c in string.ascii_letters表示的是,如果c在[a-zA-Z]内,则返回TRUE,否则返回False。
3.获取指定目录下的所有指定后缀的文件名
import os
def getFileName(path):
filename = []
f_list = os.listdir(path)
for i in f_list:
if os.path.splitext(i)[1] == '.docx':
filename.append(i)
return filename
上面这个函数中值得注意的是os.listdir(path)表示得到该路径下所有的文件名及其扩展名。os.path.splitext,它的作用时分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作,得到结果如下:
我们的三个程序写完啦,可是每次都调用三个函数,有点麻烦,所以我们将三个函数整合成一个函数叫word_count。
4.将三个函数汇总成一个函数
def word_count(dir):
for filename in getFileName(dir):
print(filename, str_count(read_docx(dir+filename)))
我们先通过getFileName 得到某一路径下所有的docx文档名,再对每个文档使用for 循环遍历执行如下操作:首先使用read_docx函数读取该文档下的所有文本内容,以字符串形式返回,再将该字符串送入str_count处理,返回一个格式化字符串,该对象的__call__函数以键值对的形式打印出来自身所附带的所有成员变量。
然后我们在e盘新建一个空的word文档,进行测试。
比如在空的文档中写入:
我aa,,, 11111
这段内容中有一个中文,两个英文,三个标点符号,4个空格,5个数字。
我们可以得到:
接下来就让我们实际操作运行一下吧。比方说我想要得到e盘下所有word文档的信息:
print(word_count('E:/'))
得到:
这就得到最终我们想要的结果了。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
往期推文推荐:
1.爬虫俱乐部新版块--和我们一起学习Python
2.hello,MySQL--Stata连接MySQL数据库
3.hello,MySQL--odbcload读取MySQL数据
4.再爬俱乐部网站,推文目录大放送!
5.用Stata生成二维码—我的心思你来扫
6.Hello,MySQL-odbc exec查询与更新
7.Python第一天
8.Python第二天
9.事件研究大放送
10.爬虫俱乐部隆重推出网上直播课程第一季
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。