分享

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

 张春强2022 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这个文件隐藏起来,然后看一下运行结果。


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

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

                        文字编辑:   王明

技术总编:刘贝贝



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多