精华内容
下载资源
问答
  •   作者:吴玉轩 (南开大学) Stata 连享会: 知乎 | ... mvfiles 应用实例2.1 基于 auto 数据的模拟2.1.1 excel 文件的移动2.1.2 子文件夹下 excel 文件提取2.2 EndNote 中 PDF 文件提取其他相关命令关...

    作者:吴玉轩 (南开大学)

    Stata 连享会: 知乎 | 简书 | 码云 | CSDN

    2019暑期“实证研究方法与经典论文”专题班-连玉君-江艇主讲

    2019暑期“实证研究方法与经典论文”专题班-连玉君-江艇主讲

    导言: 无论是在科研还是日常生活中,我们经常需要对同一目录下多个子文件夹下的文件进行移动操作。例如,将 EndNote 生成的多个子文件夹下的 PDF 文档移动到一个文件夹;对从国泰安数据库下载的多个子文件夹中的文件进行合并;将 百度音乐千千静听 的软件自动产生的分散于多个文件夹中的音频文件合并到一个文件夹中,等等。

    本文介绍的 mvfiles 命令可以从多个文件夹提取文件,是完成上述任务的利器。

    1. mvfiles 命令简介

    ssc install mvfiles, replace 
    

    安装完成后使用 help mvfiles 命令可以查看其帮助文件。mvfiles 的语法结构如下:

    mvfiles [, infolder(string) outfolder(string) match(string)
               subs(string) makedirs erase oldstx]
    

    各个选项含义如下:

    • infolder() 设定待搜寻的文件所在的文件路径
    • outfolder() 设定目标文件路径
    • match() 设定文件匹配准则
    • subs() 确定匹配准则是否应用于子文件夹
    • makedirs 如果目标文件夹不存在,则自动生成
    • erase 旧文件被移动后自动删除
    • oldstx 兼容 Stata 9.0 以下版本,较少使用

    2. mvfiles 应用实例

    下面将通过几个实例展示 mvfiles 的具体用法。

    2.1 基于 auto 数据的模拟

    本小节将利用 Stata 自带的 auto.dta 数据生成 excel 文件及相应的文件夹,然后利用 mvfiles 移动各个子文件夹中的 excel 文件。

    2.1.1 excel 文件的移动

    • 生成 excel 文件
    cap mkdir "d:\data" //新建工作文件夹data
    cd d:\data //将d:\data作为当前工作路径
    webuse auto, clear //读入auto数据
    // 利用循环,在 data 文件夹下生成 10个excel 文件,分别命名为 auto1-auto5, sub1-sub5
    forvalues i=1(1)5{
    export excel auto`i'.xlsx,replace
    export excel sub`i'.xlsx,replace
    }
    

    运行上述代码,得到下图所示的 10 个 excel 文件:

    excel文件

    如果想将 d:\data 文件夹下的 sub1-sub5 等5个 excel 文件移动至 d:\data\move_sub 文件夹下,可以采用如下命令:

    mvfiles , infolder(".") outfolder(".\move_sub")  ///
              match("sub*") makedirs erase 
    

    选项释义:

    • match 选项表明是通过开头的 sub 字符作为匹配标准
    • makedirs 用来生成 move_sub 子文件夹
    • erase 选项将 [d:\data] 下的原始文件删除,相当于执行了剪切的操作,

    如下代码则将 [d:\data] 文件夹下的所有 excel 文件移动至 move_all 子文件夹下。:

    mvfiles , infolder(".") outfolder(".\move_all") match("*") makedirs erase
    

    2.1.2 子文件夹下 excel 文件的提取

    本小节首先在 [d:\data] 下生成若干子文件夹及 excel 文件,然后展示 excel 文件在子文件夹中的提取过程。

    • d:\data\ 下生成 10 个子文件夹,分别命名为 auto1-auto5sub1-sub5,并在每个子文件夹下生成相应的 excel 文件。
    • 代码如下:
    forvalues i=1(1)5{
        cap mkdir "d:\data\auto`i'"
        cap mkdir "d:\data\sub`i'"
        cd "d:\data\auto`i'"
        webuse auto, clear
        export excel auto`i'.xlsx,replace
        cd "d:\data\sub`i'"
        webuse auto, clear
        export excel sub`i'.xlsx,replace
    }
    

    这样便生成了10个子文件夹,并在每个子文件夹下生成了1个 excel 文件,文件名称与文件夹名称一致,结果如下图:

    子文件夹

    现在,只需要如下简单的命令就可以将以 auto 开头的子文件夹下的 excel 文件统一移至 move_data文件夹下。

    cd d:\data
    mvfiles , infolder(".") outfolder(".\move_data") match("auto*") subs("auto*") makedirs
    // subs选项用来选择匹配的子文件夹,
    // 此处选择的是子文件夹名称为 auto 的文件夹中的excel文件
    

    下图展示了移动后的结果:

    excel移动效果图

    2.2 EndNote 中 PDF 文件的提取

    应用场景: 我的同学向我索要一些有关 Bootstrap 的经典文献,我在我的 EndNote 中找到了 20 多篇,想把对应的 PDF 文件发给她。以往的做法是一篇一篇 另存 到一个文件夹中,很繁琐。

    现在想到了一个好办法,就是先选中这些文献,右击,把这些文献存入一个新的 EndNote 文献库【BS-EndNote Library】,而相应的 PDF 文件就被存放在该文件夹下的 【PDF】自文件夹。

    可是,问题又来了,20 篇 PDF 文件被分散存储在 20 个不同的文件夹中,想把它们一个一个提取出来也挺麻烦。

    上述实操过程见下图:

    从 EndNote 中导出的 PDF 文件

    此时,若用 mvfiles 命令便非常简单。

    Stata 范例 1: mvfiles 的基本用法

    • 做法1: 使用默认选项
    * 改变工作路径至存储 PDF 文件的位置
      . cd "D:\Bootstrap\BS-EndNote Library.Data\PDF"
    * 提取当前工作路径下以及子文件夹中的所有 PDF 文件 (`*.pdf`)
      .  mvfiles, subs("*") match("*.pdf")
    

    注意,本例中的两个选项 subs("*")match("*.pdf") 都必须填入才能实现我们的目的。

    • subs("*") 表明我们不但要提取当前路径下的文件,还要提取其子文件夹中的文件;

    • match("*.pdf") 则指定了需要提取的文件必须以 .pdf 结尾,即 PDF 文件。*.pdf 的准确含义是:以任何字符开头 (通配符 * 的作用),以 .pdf 结尾的文件。

    • 被提取出的所有 PDF 文件会被自动存放于一个名为 mvfiles 的文件夹中 (该文件夹会被自动生成,存放于当前工作路径下)。

    • 做法2: 设置完整的输入\输出路径
      我们也可以在 mvfiles 命令中附加 infolder() 和\或 outfolder() 选项,以便将上述命令合并为一条命令,并自行制定存放 PDF 文件的文件夹名称。这在程序定义中非常有用:

    * 改变工作路径至存储 PDF 文件的位置
      global path "D:\Bootstrap\BS-EndNote Library.Data\PDF"
    * 在所有子文件夹下,按照关键字 JIE 匹配 PDF 文件,并进行移动操作
      mvfiles , infolder("$path") outfolder("$path\PDF_ALL") makedirs ///
                subs("*") match("*.pdf")  
    

    输出效果如下:

    mvfiles 自动提取的 PDF 文件

    • mvfiles 的几个 bugs
      • 在上例中,虽然我们指定了用于存放输出 PDF 文件的文件夹 PDF_ALL,但 mvfiles 仍然会在该文件夹下自动生成一个名为 mvfiles 的子文件夹,里面存放的 PDF 文件与 PDF_ALL 中完全相同;
      • mvfiles 你能提取一级子目录下的文件,无法层层递进地进一步提取孙辈、曾孙辈……文件夹中的文件。这其实可以在程序内部嵌入外部命令 lmsdirbrcd 以便能够遍历所有子孙文件夹。程序的修改工作留给读者。

    Stata 范例 2: 提取包含特定关键词的 PDF 文件

    在使用 EndNote 软件管理文献的过程中,在电脑硬盘下会形成如下图所示的文件夹布局形式 (限于篇幅,只截取了部分内容):

    image

    上面的每个子文件夹中保存着相应的文献(PDF格式),现在想获取所有子文件夹下 PDF 文件名称中包含 JIE 字符的文件,并移动至 literature_JIE 文件夹下(设想一下,某一天,心血来潮,想看看自己收藏了多少 JIE 论文;或者是想把这些文献发给一个不适用 EndNote 的 Coauthor),代码可以写为:

    * 更换工作路径,注意:***位置替换为自己的文件路径
      cd "d:\***\My  Library-literature.Data\PDF"
    * 在所有子文件夹下,按照关键字 JIE 匹配 PDF 文件,并进行移动操作
      mvfiles , infolder(".") outfolder(".\literature_JIE")  ///
                match("*JIE*") subs("*") makedirs
    

    最终效果如下图(限于篇幅,仅展示了部分内容):

    mvfiles:包含 JIE 关键词的文献搜寻

    当然,大家也可以根据作者或者年份等关键字提取 PDF 文献,对于日常生活中的视频或音频类文件也可以采用类似的处理。

    以上就是 mvfiles 的相关内容,掌握了这一命令可以很方便的完成文件的提取与转移操作。

    其他相关命令

    • help msdirb //列示指定文件夹中的文件名,存储于 .dta 文件中
    • help lmsdirb //列示指定文件夹中的文件名,存储于暂元中
    • help rcd //遍历文件夹及所有子文件夹,文件名存储于返回值中,便于后续循环调用。rcd.ado 是个自循环程序,牛!
    • help dirtools //一系列管理文件的快捷命令
    • help renfiles // renaming set of matched files
    • help rmfiles // removing set of matched files

    关于我们

    • Stata 连享会(公众号:StataChina)】由中山大学连玉君老师团队创办,旨在定期与大家分享 Stata 应用的各种经验和技巧。
    • 公众号推文同步发布于 CSDN-Stata连享会简书-Stata连享会知乎-连玉君Stata专栏。可以在上述网站中搜索关键词StataStata连享会后关注我们。
    • 点击推文底部【阅读原文】可以查看推文中的链接并下载相关资料。
    • Stata连享会 精品专题 || 精彩推文

    联系我们

    • 欢迎赐稿: 欢迎将您的文章或笔记投稿至Stata连享会(公众号: StataChina),我们会保留您的署名;录用稿件达五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
    • 意见和资料: 欢迎您的宝贵意见,您也可以来信索取推文中提及的程序和数据。
    • 招募英才: 欢迎加入我们的团队,一起学习 Stata。合作编辑或撰写稿件五篇以上,即可免费获得 Stata 现场培训 (初级或高级选其一) 资格。
    • 联系邮件: StataChina@163.com

    往期精彩推文


    欢迎加入Stata连享会(公众号: StataChina)

    展开全文
  • 这是原来文件下的文件,我将它重新命名,然后复制到下图的文件夹下,实现将很不同文件夹下很我们想要的文件提取出来,省的手动进去每一个文件夹下复制粘贴。 完整代码如下: #-*- coding:utf-8 -*- #作者:...

    这条博客分享一个脚本,实现将不同文件夹的我们需要的文件提取到一个新的文件下。如:

    这是原来文件下的文件,我将它重新命名,然后复制到下图的文件夹下,实现将很多不同文件夹下很多我们想要的文件提取出来,省的手动进去每一个文件夹下复制粘贴。

    完整代码如下:

    #-*- coding:utf-8 -*-
    #作者:小星星
    # 复制图像到另一个文件夹
    # 文件所在文件夹
    import numpy as np
    import matplotlib.pyplot as plt  
    import os
    import time
    import shutil
    for i in range(437,458):#遍历一个文件夹下的文件范围
        i = str(i)
        s = i.zfill(3)#保留三位有效位
        #print(i)
        #print(s)
        #print(type(i))
        fir = s
        #print(type(fir))
        print(fir)
        file_dir = 'E:\\AD datasets\\disc12\\OAS1_0'+fir+'_MR1\\FSL_SEG'#读取文件夹需要提取的文件
        file_dir_1 = 'E:\\AD datasets' #
        # 创建一个子文件存放文件
        name = 'Image'
        file_list = os.listdir(file_dir)
        for image in file_list:
        #如果图像名为*.gif 则将*.gif复制到'E:\\AD datasets\\Image'
            if image == "OAS1_0"+ fir +"_MR1_mpr_n3_anon_111_t88_masked_gfc_fseg_tra_90.gif":
                aaa=file_dir+'\\'+image
                os.rename(aaa,"E:\\AD datasets\\disc12\\OAS1_0"+ fir +"_MR1\\FSL_SEG\\"+ fir +".gif")
                #image = "029.gif"
                image = fir + ".gif"#重新命名
                print ('copy right' )
            
                if os.path.exists(os.path.join(file_dir_1,'Image')):
                    shutil.copy(os.path.join(file_dir,image), os.path.join(file_dir_1, 'Image'))
                else:
                    os.makedirs(os.path.join(file_dir_1,'Image'))
                    shutil.copy(os.path.join(file_dir, image), os.path.join(file_dir_1, 'Image'))

    我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2n1kyvvoqpkw0

    展开全文
  • 一、问题工作需要将多个小的excel文件合并成为一个excel文件文件格式、内容一致,因为文件数目较多,不考虑... 图1 同一个文件夹下的多个excel文件二、代码Sub 打开文件夹下所有文件并复制制定内容()Dim a$, n As...

    一、问题

    工作需要将多个小的excel文件合并成为一个excel文件,文件格式、内容一致,因为文件数目较多,不考虑手动粘贴复制,直接考虑使用VBA程序解决这个问题。


                                                                图1 同一个文件夹下的多个excel文件

    二、代码

    Sub 打开文件夹下所有文件并复制制定内容()

    Dim a$, n As Long, i As Long, Num As Long, Name$    '定义n为计算写入的起始行号,Num为文件计数,n最好设为长整型,不然容易溢出
    Dim h% 'h定义为除首行(字段名)的内容行数
    Dim mypath$
    t = Timer
    Application.ScreenUpdating = False
    mypath = ActiveWorkbook.Path '获取当前宏文件所在问价夹路径
    a = Dir(mypath & "\" & "*.xls") '获取当前文件夹下文件路径
    Workbooks.Open mypath & "\" & a '遍历文件
    Workbooks(a).Activate
    i = Sheets("Sheet0").Range("a65536").End(xlUp).Row '这里.xls最大行数只能是65536
    Workbooks(a).Sheets("Sheet0").Range("A2", "P" & i).Copy Workbooks("汇总").Sheets("汇总").Range("A2")
    Workbooks("汇总").Sheets("汇总").Range("Q2", "Q" & i) = a
    Workbooks(a).Close
    Num = 1
    Name = Left(a, Len(a) - 4)
    Do
    a = Dir
     If a <> "" And a <> "汇总.xlsm" Then
        Workbooks.Open mypath & "\" & a
        n = Workbooks("汇总").Sheets("汇总").Range("a1048576").End(xlUp).Row + 1
        Workbooks(a).Activate
        i = Workbooks(a).Sheets("Sheet0").Range("a65536").End(xlUp).Row
        Workbooks(a).Sheets("Sheet0").Range("A2", "P" & i).Copy Workbooks("汇总").Sheets("汇总").Range("A" & n)
        Workbooks("汇总").Sheets("汇总").Range("Q" & n, "Q" & n + i - 2) = a
        Workbooks(a).Close
        Num = Num + 1
        Name = Name & Left(a, Len(a) - 4)
    '    MsgBox "共合并:" & Num & "个文件!"
     Else
        MsgBox "共合并:" & Num & "个文件!" & "共用时:" & (Timer - t) & "s"
        Exit Sub
     End If
    Loop
    End Sub
    展开全文
  • 博主是需要将这三个文件夹的每一个对应的元素单独提取出来,变成一个文件夹...建立多个文件夹: ** 我的解决思路: ** 批量新建文件 这里参考我的另外一篇博客:https://blog.csdn.net/weixin_43582443/article/de

    参考链接:https://jingyan.baidu.com/article/ce43664953f8ee3773afd3b6.html

    博主是需要将这三个文件夹里的每一个对应的元素单独提取出来,变成一个文件夹。如下图所示。
    三个文件夹:
    ljx
    每个里面:
    ljx
    ljx
    ljx
    要把每个文件里对应的拿出来,然后到一个文件里去。
    就像这样:
    ljx
    建立多个文件夹:
    ljx
    **

    我的解决思路:

    **

    1. 批量新建文件
      这里参考我的另外一篇博客:https://blog.csdn.net/weixin_43582443/article/details/111825809

    2. 把这三个文件夹和需要新建的文件夹单独放在一个目录下:
      像这样:
      ljx
      labelme_json里面按刚刚的方法批量新建文件夹:
      ljx

    3. 打开左上角进行查找
      ljx
      比如搜索 “12” :

    ljx

    这样直接选中下面三个拖动到上面就好了~就完成了!
    注意:拖动操作是“移动”不是“复制”,所以如果还需要原来的三个文件的话记得备份。不然就都被移动去了其他文件夹。

    展开全文
  • 解压后,会发现里面有多个文件夹,而且最烦人的是:有的文件夹有annotations.txt,而有的没有。 miRNA注释文档有9列 我们利用perl把所有的注释信息(id和note)放在一个文档,方便后续工作 perl代码 #获取某个...
  • python提取多个文件夹下某一特定文件中的数据写入Excel
  • 使用Python将多个文件夹中的文件拷贝到同一个文件夹中 处理CityPersons数据集时,需要将多个文件夹中的图片拷贝至同一个文件夹中,因此编写了这个脚本。 运行环境 Python 3 源代码 # coding=utf-8 import os import ...
  • 批量实现多个文件夹中的文件合并

    千次阅读 2020-04-12 23:19:07
    批量实现多个文件夹中的文件合并 在多数情况下,大家可能会遇到代码文件太多,存放混乱,那么改如何整理呢?小编这里想到利用python来实现文件合并。 例如,将如下两个文件夹中所有的文件整理到一个新的文件夹中 点开第...
  • 经常下载不同的数据集,发现很数据集经常是文件夹下有很文件夹代表着类别,如1,2,3……,子文件夹下就放着该类的特征文件。因为系统读取文件夹时并不是严格意义上的升序,而是1,10,100……20,21……的形式。要...
  • 如题,本来是一不嫌麻烦可以手动复制粘贴实现的,奈何由于疫情闲在家...我要做的是要下面文件夹中各随机挑选2张图片复制到其他路径 import os, random, shutil firstdir = 'C:/Users/10791/Desktop/数据集...
  • 怎么才能把一个文件夹内的文件重命名为另一个文件夹里的文件名(两个文件夹内的文件个数相同) 本来是想用 api之类的 但是没有开放 不能用 就想着直接去读取使用的文件了 一种是 在 文件夹A中 找到一个a1.* ...
  • 1、读取一个文件夹下的多个文件,主要是使用OS包的listdir()函数 2、匹配并替换字符串主要是使用re包里面的sub()函数 #这里的示例是实现对所有文件中的某个字符串进行匹配并替换为‘你好’,即: import os ...
  • 提取多个文件夹图片到一个文件夹

    千次阅读 2018-06-29 14:51:45
    new_img = "C:\\Users\\jxy11\\Desktop\\polyu-all-test" for i in range(26): path_img = "C:\\Users\\jxy11\\Desktop\\polyu-test\\p" + str(i+1) +"\\" Is = os.listdir(path_...
  • 我的电脑E盘:\music文件夹内存放很音乐相关...首先在需要提取名称的文件夹内新建一文本文档(即.txt文件)。 打开新件的文本文档,并输入DIR *.* /B > 文件名称列表.txt 保存后关闭。
  • 我有一个 名叫 baiyin的文件夹 里面有一些按...现在 我想把图片按照子文件夹的日期名称重命名后 移到另一个文件夹allbaiyin中 并删除空文件夹  如果不删除 去掉Rd /q "%%i" 如果不移动 只是复制 则把 Move 改为Copy
  • > 遇到问题:找了很电子书看,每以书名命名的文件夹有的有好几本,有的有一本,点开找太麻烦,想全部移到同一目录下,一手动操作太麻烦,于是采用了以下的方法 ## 1. 在搜索框输入``*.*`` ![在这里插入...
  • 这几天做数据的时候遇到了一个问题,我有一个文件夹,里面有各种文件,什么图片啊等等的文件,和我的好朋友杨医生要求只提取出文件夹而不需要文件,我于是一个一个文件夹新建,花了2个小时。 今天,我决定写一段...
  • 批量提取文件夹文件名称

    千次阅读 2019-06-02 10:33:50
    1.在需要提取名称的文件夹中右键新建一“文本文档” 2.打开文本文档,输入以下命令并保存 @ECHO OFF tree /F > 文件树.txt 3.更改这文本文档的扩展名为 .bat 4.双击运行这个文件,就会出现一名为“文件树....
  • 可是发现是很(13个)压缩包组成的,而不是将视频放在一个文件夹内,虽然能够快速单独解压出来,但是仍然是13个文件夹,就是下图的样子,想要看视频还得去点每一个文件夹,甚是不便,于是想着用matlab来解决这个...
  • MAC快速归类整理桌面文件到新建文件夹的技巧: 更技巧和软件:壹步管家formac  

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 95,906
精华内容 38,362
关键字:

从多个文件夹里提取文件