批量处理——输出文件名到文本文档

2017-08-01 司海涛 爬虫俱乐部 爬虫俱乐部

大大大大大新闻————爬虫俱乐部新推出了视频讲解环节。小编突然浮现出一个画面——看着视频嗑着瓜子学着stata,妈妈再也不用担心我的stata了!详情请猛戳文章下面的视频。

小编在这里深感抱歉,昨天没有发布推文,因为技术原因,视频上传不了,爬虫俱乐部将在星期六补上一篇推文和视频。

前几天有位粉丝提了这么一个问题:如何将某一文件夹下的子文件夹以及文件的名成输出到.txt文本文档中?下边列出来了3种方法来解决这个问题。

一、   创建文件夹及文件

为了方便大家操作程序,我们首先在e盘根目录下创建一个sample的文件夹,然后在这个文件夹下分别生成5个子文件夹、文本文档、后缀为.xls的Excel文件、后缀为.xlsx的Excel文件、dta文件,程序如下:

clear

set more off

cap mkdir e:/sample/

cd e:/sample/

sysuse auto,clear

forvalue i = 1(1)5 {

     cap mkdir e:/sample/文件夹`i'

     outsheet using temp`i'.txt,replace

     export excel using temp`i'.xls,replace

     export excel using temp`i'.xlsx,replace

     save temp`i'.dta,replace

}

这样我们就创建了一个sample文件夹,其中有子文件夹、.dta文件、.txt文件、.xls文件、.xlsx文件各5个。如下图所示:

二、   用logout和dir命令写入文本文档

通过logout命令将dir结果输出到text文件中,然后用subinfile命令把多余的字符串删除掉,只保留文件名称及其后缀。

1

输出所有文件夹及文件的名称,程序如下:

logout, save(e:/output) text replace : dir

subinfile e:/output.txt,from(".+?\d:\d{2}\s+\.{0,2}") fromregex dropempty replace

shellout e:/output.txt

运行结果如下:

2

2

输出.dta文件的文件名,程序如下:

logout, save(e:/output) text replace : dir *.dta

subinfile e:/output.txt,from(".+?\d:\d{2}\s+") fromregex replace

shellout e:/output.txt

运行结果如下:

三、用fs和file write命令写入文本文档

读入后缀为.xls的文件

1

文件名列在同一行

fs *.xls

tempname handle

file open `handle' using e:/output.txt,write text replace

file write `handle' `"`r(files)'"'

file close `handle'

subinfile e:/output.txt, from(`"""') replace

shellout e:/output.txt

结果如图所示:

2

列出每个文件名,每行一个

fs *.xls

tempname handle

file open `handle' using e:/output.txt,write text replace

foreach w in `r(files)' {

     dis "`w'"

     file write `handle' "`w'" _n

}

file close `handle'

shellout e:/output.txt

结果如图所示:

四、   dos命令:dir

1

 将所有.txt文件的名称导入到output.txt中,程序如下:

! dir *.txt /a-d /b > e:/output.txt

shellout e:/output.txt

首 先,!表示在stata中调用dos命令,dir是一个dos命令,/a只显示指定属性的目录和文件名名称。如果省略/a, dir将显示除隐藏文件和系统文件之外的所有文件名。如果没有指定attributes情况下使用/a,dir将显示所有文件,包括隐藏文件和系统文件。 这里赋给a一个值为-d,表示只显示文件不显示目录,其实这里前*.txt已经指定了文本文档,已经表示显示文件,-d加不加都是一样的,/b 便是不显示标题和摘要,如果没有这个选项,系统的一些数据,如字节、文件数会显示出来,这个在后边的例子中会有展示,> e:/output.txt表示将显示的结果输出到output.txt中。

2

将所有文件(不包括文件夹)的名称输出到output.txt中;

! dir /a-d /b > e:/output.txt

shellout e:/output.txt

注意,这里dir后边我们并没有指定特定格式的文件,这时候a的值为-d时,将不会显示出来文件夹的名称,结果如图所示:

3

将.dta文件导入到output.txt,并显示标题和摘要;

! dir *.dta /a-d > e:/output.txt

shellout e:/output.txt

结果如图所示:

这里由于没有指定/b选项,所以标题和摘要都显示了出来。

4

如果不指定/a选项,将无法显示隐藏文件和系统文件。我们把temp1.dta这个文件隐藏起来,然后看一下运行结果。

! dir *.dta  /b  > e:/output.txt

shellout e:/output.txt

我们会看到被隐藏的temp1.dta没有显示出来。

5

指定/a选项不指定值,会显示所有文件夹及文件的名称,包括隐藏文件和系统文件;

! dir /a /b > e:/output.txt

shellout e:/output.txt

可以看到,temp.dta在指定/a时,显示了出来。

6

只显示隐藏文件,a的值为h

! dir *.dta /a:h  /b  > e:/output.txt

shellout e:/output.txt

结果如图所示:

其中/a:h冒号是可选的,不要冒号写成/ah也是可以的。

7

只显示目录,a的值为d

! dir /a:d /b > e:/output.txt

shellout e:/output.txt

结果如图所示:

8

 /o选项,按文件大小进行排序,小的优先。o的值为s

! dir /a-d /o:s /b > e:/output.txt

shellout e:/output.txt

关于dir的选项有很多很多,这里不在过多讲解,感兴趣的读者可自行查阅资料。

接下来就是本期推文作者司海涛的实战视频讲解,这是爬虫俱乐部第一个视频,欢迎大家来纠错:


以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

                        文字编辑:   王明

技术总编:刘贝贝



往期推文推荐:

1.高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3.命令sum2docx输出统计量表到docx文件

4.reg2docx报告你的实证结果吧!

5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件

6.putdocx+wordconvert—将实证结果输出到Word.docx)文档

7.Stata 15Markdown——没有做不到,只有想不到!

8.矩阵和宏的故事

9.shelloutopen anything

10.Putpdf--神奇的转换工具



关于我们

微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:statatraining@163.com

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

欢迎关注爬虫俱乐部

微信扫一扫
关注该公众号