查看原文
其他

批量修改路径

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:王碧琪

文字编辑:李钊颖

技术总编:李朋冲


爬虫俱乐部将于2020年1月5日至11日湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~详细培训大纲及报名方式,请点击《爬虫俱乐部2020第一期Stata编程训练营开始报名啦!》或点击文末阅读原文呦~

另外,2019年11月29日-12月1日在湖北武汉举办的《2019年Python第四期培训招生》,招生工作已经结束,请大家继续关注我们后续的培训公告哦~


最近,小编在给文件搬家,文件是弄过去了,可是do文件的路径却还要手工修改,在一个大文件夹(包含子文件夹)中有若干do文件,手工改动繁琐又头疼。后来,小编发现了subinfile和filesearch这俩命令,之前我们在推文《批量修改do文件路径》和《筛选文件利器——filesearch命令》中介绍了它们的用法。把二者合起来使用,可以达到1+1>2的效果。有了这个神器,妈妈再也不用担心我批量修改do文件路径会累着手指头了!!!


一、安装

filesearch和subinfile都是外部命令,我们首次使用时需要安装。

ssc install filesearch,replacessc install subinfile,replace


二、开始操作

1.subinfile简介
subinfile的语法结构是:
subinfile filesource, [options]
其中filesource必须是路径和文件名,路径可以省略,默认为当前路径。


2.明确目标
小编的一个大文件夹“file”下,有do文件,也有几个子文件夹,子文件夹中分别包含若干个do文件


我们可以用dir命令查看一下文件夹中的do文件。

clearcd E:\filedir dir .\利润表\*.dodir .\现金流量表\*.dodir .\资产负债表\*.do

结果是:



可以看出,在file文件夹下有4个do文件,以及“利润表”“现金流量表”“资产负债表”三个文件夹,它们中又分别包含一些do文件。


3.fs命令

如果我们使用往期推文《批量修改do文件路径》中的fs命令,则只能得到当前路径下的do文件,无法拿到同级子文件夹中的do文件。

fs *.do
结果如下:


4.subinfile命令配合filesearch命令

4.1得到文件名

我们想要拿到所有的do文件的名称以及路径(以便填在subinfilefilesource里),只需要使用filesearch递归搜索选项

filesearch *.do, local(dofile) r //r表示遍历搜索。

结果是:


这样我们就遍历得到了file文件夹下所有的do文件,返回的是相对路径,并且把这些文件名放在了“dofile”这个局部宏里。


4.2 得到补全的文件名
我们尝试使用subfile加上fullpath选项,
filesearch *.do, local(dofile) r fullpath



发现,结果只会出现一个点,我们还是不能把它用到subinfle的filesource中,所以我们要想办法补全完整路径,我们采用的方式是重新定义一个局部宏“f”。

filesearch *.do, local(dofile) r //r表示遍历搜索foreach file in `dofile'{ local f : di "E:\file\""`file'" //显示完整的路径 di "`f'"   }

结果如下:

至此我们得到了规范的路径名称。


4.3 do文件中的路径替换

接下里,我们对do文件中的文本内容进行处理。其中一个do文件中的部分内容如下:



如上图所示,该do文件的路径为“e:/stata教程/”。而在其他do文件中,路径可能在D盘或E盘,D盘和E盘也可能为小写字母;Stata的首字母也有大小写两种情况;路径中可能使用斜杠“/”或者反斜杠“\”;另外,在路径的末尾可能有反斜杠或斜杠,也可能没有。针对上述各种可能出现的情形,我们使用subinfile的正则表达式选项可以一次性处理,将这些do文件中的路径换为E:\file\。
filesearch *.do, local(dofile) r //r表示遍历搜索。foreach file in `dofile'{ local f : di "E:\file\""`file'" //显示完整的路径 di "`f'" subinfile `"`f'"', from("[DdEe]:[/\\][Ss]tata教程[/\\]?") fromregex to("E:/file/") replace }
运行之后,do文件中的路径已经被替换,打开一个do文件,结果为:


此时,我们就成功替换了所有路径。
这样,数据放在u盘里进行移动时,就可以在不同的电脑上,先更改再运行了。两个小命令帮我们解决了复制do文件时的烦恼,畅快!


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐  

妙用正则表达式--Python中的re模块

豆瓣电影评分之数据爬取与可视化的实现 

为了辅导作业,这位家长竟然...

       走进列表的世界——列表方法(二)
走进列表的世界——列表方法(一)
朝花夕拾|长宽数据转换——reshape命令

Stata有音乐包啦!

对《陈情令》的数据可视化分析

stata绘制热力图详解

实战演练-明星微博热搜次数的数据可视化

《少年的你》影评

集合常用方法小结

实战演练-爬取深交所年报

重建“通天塔” —— Unicode编码与解码

输出分组描述性统计表的利器——report

字典常用操作小结

关于我们

微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存