宏扩展函数dir的用法介绍
本文作者:杨慧琳
本文编辑:李朋冲
技术总编:王凯丽
爬虫俱乐部郑重推出中国高校上市公司高管排行榜,受到社会各界的广泛关注。我们所采用的数据全部来源于百度词条、新浪财经、国泰安等,客观公正!如有需要,可联系爬虫俱乐部!
爬虫俱乐部将于2019年1月19日至25日在武汉举行两期Stata编程技术定制培训,此次采取初级班和高级班分批次培训模式,采用理论与案例相结合的方式,旨在帮助大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前还有少量名额,大家抓紧时间报名啦!详细培训大纲及报名方式,请见往期推文《2019寒假Stata编程技术定制培训班》。报名表下载请点击文末阅读原文呦~
在正式介绍宏扩展函数dir之前,我们首先回顾一下local的用法。local是一个局部宏命令,其语法如下:
local mname [option]
其中,mname为宏的名称,[option]即宏的存储内容,它可以是表达式、扩展函数、变量或字符串等形式。需注意的是,local定义的内容仅在当前子程序中可见,跳出子程序便不可见,这也体现了local的局部可见性。
本推文将详细介绍宏扩展函数dir的用法,它可以用来存储指定路径下的文件夹名称和文件名称,以便后续的处理与使用。宏扩展函数dir的基本语法为:
local list : dir ["]dirname["] { dirs | files | other } ["]pattern["] [, nofail respectcase]
其中,dirname为当前路径名称;dirs | files | other分别代表文件夹、常规文件、非常规文件;pattern为文件或文件夹样式;nofail表示若当前目录下含有太多文件名,则返回适合mname的文件名,而不报错;respectcase表示保留原有文件(夹)名称的大小写形式,否则英文字母默认输出为小写形式。在推文《“我是要成为海贼王的男人”——local命令带你纵横数据汪洋》中,我们也详细介绍过respectcase选项的用法。通常在存储文件夹或文件名称时,我们要保证其原格式不变,便需添加respectcase选项。
接下来,我们举例分析宏扩展函数dir的常见用法。
假设在根目录“F:/local”下有一系列子目录,且子目录“利润表”、“现金流量表”、“资产负债表”下分别含有对应的报表文件,如下:
现在,我们进一步介绍如何使用该宏扩展函数实现文件夹名称和文件名称的存储。
爬虫俱乐部是您身边的科研助手,能够为您在数据处理、实证研究中提供帮助。承蒙30000+粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了三节全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:
https://ke.qq.com/course/286526?tuin=1b60b462,敬请关注!
1. 存储文件夹名称
在根目录F:/local下有“利润表”、“现金流量表”和“资产负债表”三个子目录,这些都是文件夹,我们将其名称作为存储内容放入宏list中,执行程序:
clear
cd F:/local
local list : dir "." dirs "*", respectcase
disp `"`list'"'
输出结果:
其中,“.”和“*”为通配符;“.”代表缺省路径,“ dir "." ”表示遍历当前路径;“*”可匹配任意零个、单个或多个字符,“ dirs "*" ”表示遍历当前路径下的所有文件夹。
若要存储某一指定路径下的文件夹名称,则将“.”替换为相应的路径名称即可,示例如下:
clear
local list : dir "F:/local" dirs "*", respectcase
disp `"`list'"'
输出结果:
2. 存储文件名称
(1)存储当前目录下的文件名
我们依然可以用“ dir "." ”表示遍历当前路径,并用“ files "*" ”匹配任意格式的文件名,执行程序:
clear
cd F:/local
local list: dir "." files "*", respectcase
disp `"`list'"'
此时,输出结果中含有xls、dta、txt、csv、docx等多种格式的文件。但在实际操作中,我们可能只需要处理特定类型的文件,如果我们需要扩展名为dta的文件、名称首字母为“L”的文件或是以数字“3”结尾的文件,我们分别执行如下程序:
local list1: dir "." files "*.dta", respectcase
disp `"`list1'"'
local list2: dir "." files "L*", respectcase
disp `"`list2'"'
local list3: dir "." files "*3.*", respectcase
disp `"`list3'"'
输出结果:
当设定“ files "*.dta" ”时,程序仅会匹配到格式为dta的文件,并将其存储于局部宏list1中。倘若我们想要匹配其他格式的文件,如xls文件及csv文件,也可采用这一句式,而仅需将扩展名“*.dta”改写为“*.xls”或“*.csv”。同样的,当设定名称以“L”开头或以“3”结尾时,程序也仅会匹配到形如“L...”或“...3...”样式的文件。其中,“L*”表示首字母为“L”,用“*”去匹配其余字符;“*3.*”表示匹配名称最后一个字符是“3”的各类文件,其中第二个“*”用来匹配文件的扩展名。
(2)存储子目录下的文件名
在当前路径下还存在“利润表”、“现金流量表”、“资产负债表”三个子目录,我们采用语法 local list : dir "subdir" files "*"
将某一子目录下的文件名存储于局部宏list中。其中,“subdir”表示任一子目录的名称。我们以利润表子目录为例,执行程序:
clear
cd F:/local
local list: dir "利润表" files "*", respectcase
disp `"`list'"'
我们可看到利润表子目录下的所有文件。若要一次输出多个子目录下的文件名,则可结合循环句式,先将当前路径下多个子目录名称放入局部宏中,再进行调用。示例如下:
local dirlist : dir "." dirs "*" //将子目录名称放入局部宏dirlist中
foreach dir in `dirlist' { //对子目录进行循环
local filelist : dir "`dir'" files "*"
disp `"`filelist'"'
}
输出结果:
这样,三个子目录下的文件名信息便都显示在界面中了。当然在实际使用中,也可自行调整路径信息或是文件类型。
以上就是local命令在扩展函数dir中的常见用法。一起来操作一下吧!
有问题,不要怕!访问
http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx (复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。