查看原文
其他

批量修改do文件路径

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

本文作者:杨长青

本文编辑:田志凡

技术总编:司海涛


爬虫俱乐部将于2019年1月19日至25日在武汉举行两期Stata编程技术定制培训,此次采取初级班和高级班分批次培训模式,采用理论与案例相结合的方式,旨在帮助大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。详细培训大纲及报名方式,请见往期推文《2019寒假Stata编程技术定制培训班》。报名表下载请点击文末阅读原文呦~

我们有些时候可能需要将do文件里边的路径进行更改,但问题是do文件数量太多,一一进行替换显然是非常麻烦的。假如有如下图所示的一个文件夹,里边有一些do文件:


其中一个do文档的内容如下: 

  如上图所示,该do文件的路径为“e:/stata教程/”,但是在其他do文件中,路径可能在D盘也有可能在E盘,D盘和E盘也可能被写为小写字母;Stata的首字母也有大小写两种情况;路径中可能使用斜杠“/”或者反斜杠“\”;另外,在路径的末尾可能有反斜杠或斜杠,也可能没有,但我们只把需它们前面的内容替换即可。

 那么,也就有如下16种格式的路径:

     我们知道,subinfile可以实现对文本文档的修改,因此可以使用subinfile命令结合循环进行批量修改do文件。假设我们需要将原路径替换为“E:/example”,程序如下:

clear cd E:/example/ fs *.do foreach f in `r(files)' {       clear       dis "`f'"       subinfile `f', from("E:/stata教程")to("E:/example") replace       subinfile `f', from("D:/stata教程")to("E:/example") replace       subinfile `f', from("e:/stata教程")to("E:/example") replace       subinfile `f', from("d:/stata教程")to("E:/example") replace       subinfile `f', from("E:\stata教程")to("E:/example") replace       subinfile `f', from("D:\stata教程")to("E:/example") replace       subinfile `f', from("e:\stata教程")to("E:/example") replace       subinfile `f', from("d:\stata教程")to("E:/example") replace       subinfile `f', from("E:/Stata教程")to("E:/example") replace       subinfile `f', from("D:/Stata教程")to("E:/example") replace       subinfile `f', from("e:/Stata教程")to("E:/example") replace       subinfile `f', from("d:/Stata教程")to("E:/example") replace       subinfile `f', from("E:\Stata教程")to("E:/example") replace       subinfile `f', from("D:\Stata教程")to("E:/example") replace       subinfile `f', from("e:\Stata教程")to("E:/example") replace       subinfile `f', from("d:\Stata教程")to("E:/example") replace }

爬虫俱乐部是您身边的科研助手,能够为您在数据处理实证研究中提供帮助。承蒙30000+粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:https://ke.qq.com/course/286526?tuin=1b60b462,敬请关注!

但是穷举好累!特别是当需要修改的do文档的路径更加复杂,穷举的工作量也会成倍增加。此时,该怎么办呢?我们知道正则表达式可以巧妙的处理复杂的文本,这里可以写出一个正则表达式来匹配所有可能出现的路径格式,

即:[EeDd]:[/\\]][Ss]tata教程

其中:

[EeDd]:匹配E,e,D,d中的任意一个字符。

[/\\]:匹配斜杠“/”或者反斜杠“\”

[Ss]:匹配“S”或者“s”。

我们可以用正则表达式配合subinfile命令使用,程序如下:

clear cd e:/example/ fs*.do foreach f in `r(files)' {       clear       dis "`f'"       subinfile `f',from("[EeDd]:[/\\][Ss]tata教程")fromregex to("E:/example") replace }

运行程序后,文档中所有可能的“D:/Stata教程”都被替换成“E:/example”,结果如下图所示:

可以发现正则表达式只用了一行代码就代替了上面穷举的十六行代码,当文件路径越复杂,正则表达式的优势也越明显,这也是正则表达式的魅力所在!爬虫俱乐部将在寒假举行Stata编程技术培训班,到时将会系统全面的讲解正则表达式的内容。如有需要,欢迎大家报名。

有问题,不要怕!访问 

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分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

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

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