精华内容
下载资源
问答
  • Python树形打印目录结构

    千次阅读 2017-09-07 20:59:56
    前言这两天整理数据文件的时候发现,一层层的点击文件夹查看很繁琐,于是想写一个工具来递归打印出文件目录的树形结构,……最后终于发现了os.listdir这个函数,可是使用它来写一个深度优先搜索,只要递归调用就能...

    前言

    这两天整理数据文件的时候发现,一层层的点击文件夹查看很繁琐,于是想写一个工具来递归打印出文件目录的树形结构,网上找了一些资料几乎都是使用的os.walk, 调试了以后发现返回的貌似的是一个“生成器”,只需要for循环即可,可是这样得到的好像是BFS的结构,并不是我想要的树形结构,最后终于发现了os.listdir这个函数,可是使用它来写一个深度优先搜索,只要递归调用就能解决我的问题。

    代码

    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    #a test for traverse directory
    
    __author__ = 'AlbertS'
    
    import os
    import os.path
    
    def dfs_showdir(path, depth):
        if depth == 0:
            print("root:[" + path + "]")
    
        for item in os.listdir(path):
            if '.git' not in item:
                print("|      " * depth + "+--" + item)
    
                newitem = path +'/'+ item
                if os.path.isdir(newitem):
                    dfs_showdir(newitem, depth +1)
    
    if __name__ == '__main__':
        dfs_showdir('.', 0)

    运行效果

    root:[.]
    +--1111.segmentfault.com
    |      +--01decode.py
    |      +--01string.txt
    |      +--1111.segmentfault.com.tar.gz
    +--urllib_test.py
    +--use_module.py
    +--water_deal
    |      +--water_pouring2.py
    +--web
    |      +--module_test.py
    |      +--__init__.py
    |      +--__pycache__
    |      |      +--module_test.cpython-34.pyc
    |      |      +--__init__.cpython-34.pyc
    +--web_crawler
    |      +--bg_teaser.svg
    |      +--crawler_images
    |      |      +--10393478-1.jpg
    |      |      +--13802226-1.jpg
    |      |      +--169b1b76356f636.jpg
    |      |      +--1a774de56fb4bf2.jpg
    |      |      +--small_event_dft.jpg
    |      |      +--ypy_qr.jpg
    |      +--crawler_image_test.py
    |      +--crawler_test.py
    |      +--crawler_website
    |      |      +--crawler_article_set
    |      |      |      +--aiohttp.html
    |      |      |      +--asyncio.html
    |      |      |      +--async_await.html
    |      |      |      +--base64.html

    总结

    1. 一开始写的时候发现只能递归一层文件夹,后来发现问题出现在os.path.isdir函数这里。
    2. 传给os.path.isdir函数函数的参数只能是一个绝对路径,或者相对于工作目录的相对路径。
    3. 有了上面发现的问题,才有了newitem变量拼接的过程。
    展开全文
  • 要想遍历某一目录下的文件名,使用os.walk再方便不过了。他返回的是一个以元组为元素的列表。...由于生成器技术使得会函数walk的调用一次返回一个元组,节省了内存空间,提升了执行效率。比如使用者只想得到当前目录

    要想遍历某一目录下的文件名,使用os.walk再方便不过了。他返回的是一个以元组为元素的列表。每一个元素都包含三个内容:路径,该路径下的子目录,该路径下的文件。

    os.walk使用了生成器技术(关于该技术的说明请参考其它文档或者技术资料)yield,给使用者带来了非常大的使用上的灵活性。由于生成器技术使得会函数walk的调用一次只返回一个元组,节省了内存空间,提升了执行效率。

    比如使用者只想得到当前目录这一层次的文件,而不想递归其子目录函数。如果walk没有使用生成器技术,则可能需要通过传参控制是否递归子目录,或者利用两个函数分别管理是否递归子目录。另外如果需要控制递归层次,也需要添加参数。如果不想这么麻烦,也可以一次性获取目录下所有文件(包括子目录下的),然后根据需要使用哪些文件,但是这样带来的后果是时间和空间都带来了极大的浪费。
    而使用了yield技术,由于生成器每次只生成一个目录层次的内容,节省时间和空间,同时将控制权交给用户,由用户决定是否要递归子目录。

    本文中主要的函数allFiles也运用了生成器技术,调用一次返回一个需要的文件,而不是一次性返回所有需要的列表,同样在使用的灵活性和效率上都有很好的表现。
    另外allFiles添加了一些个性化的功能:
    1、通过fnmatch对想要的文件格式进行匹配过滤,想要匹配的文件在参数patterns中通过分号传递要匹配的文件种类。例如*代表匹配所有文件,*txt代表匹配所有后缀名txt的文件。
    2、single_level为True表示只处理一层目录,为False表示递归处理子目录。3、yield_folders表示是否将匹配的目录也输出。

    # root根目录, patterns匹配文件格式, single_level是否进行目录深层次查找
    import fnmatch, os
    def allFiles(root, patterns = '*', single_level = False, yield_folders = False):
        patterns = patterns.split(';')
        for path, subdirs, files in os.walk(root):
            if yield_folders:
               #add subdirs to the tail of files
               files.extend(subdirs)
            files.sort()
            for name in files:
                for pattern in patterns:
                    if fnmatch.fnmatch(name, pattern):
                        yield os.path.join(path, name)
                        break
            #only deal one level of the dir
            if single_level:
                break
    for name in allFiles('I:\\pTest', single_level = True):
        print(name)
    展开全文
  • 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "gcr.io" -l grep -r "gcr.io" ./

    查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名

    find .|xargs grep -ri "gcr.io" -l

    grep -r "gcr.io" ./

    展开全文
  • 查找目录下的所有文件中是否含有某个字符串,并且只打印出文件名 find .|xargs grep -ri "IBM" -l 1.正则表达式 (1)正则表达式一般用来描述文本模式的特殊用法,由普通字符(例如...

    假设含有“hello”

    find .|xargs grep -ri "hello" -l
    

    这个可以,我测试了简化的:grep -l "hello" *也行。
    xargs

    grep的常用选项:grep [option] pattern file

    -V: 打印grep的版本号
    -E: 解释PATTERN作为扩展正则表达式,也就相当于使用egrep。 或操作
    -F :   解释PATTERN作为固定字符串的列表,由换行符分隔,其中任何一个都要匹配。也就相当于使用fgrep。
    -G:   将范本样式视为普通的表示法来使用。这是默认值。加不加都是使用grep。
    

    匹配控制选项:

    -e :  使用PATTERN作为模式。这可以用于指定多个搜索模式,或保护以连字符( - )开头的图案。指定字符串做为查找文件内容的样式。   
    -f :  指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
    -i :  搜索时候忽略大小写
    -v:  反转匹配,选择没有被匹配到的内容。
    -w:匹配整词,精确地单词,单词的两边必须是非字符符号(即不能是字母数字或下划线)
    -x:仅选择与整行完全匹配的匹配项。精确匹配整行内容(包括行首行尾那些看不到的空格内容都要完全匹配)
    -y:此参数的效果和指定“-i”参数相同。
    

    一般输出控制选项:

    -c: 抑制正常输出;而是为每个输入文件打印匹配线的计数。
    --color [= WHEN]:让关键字高亮显示,如--color=auto
    -L:列出文件内容不符合指定的范本样式的文件名称
    -l : 列出文件内容符合指定的范本样式的文件名称。
    -m num:当匹配内容的行数达到num行后,grep停止搜索,并输出停止前搜索到的匹配内容
    -o: 只输出匹配的具体字符串,匹配行中其他内容不会输出
    -q:安静模式,不会有任何输出内容,查找到匹配内容会返回0,未查找到匹配内容就返回非0
    -s:不会输出查找过程中出现的任何错误消息,-q和-s选项因为与其他系统的grep有兼容问题,shell脚本应该避免使用-q和-s,并且应该将标准和错误输出重定向到/dev/null 代替。
    

    输出线前缀控制:

    -b:输出每一个匹配行(或匹配的字符串)时在其前附加上偏移量(从文件第一个字符到该匹配内容之间的字节数)
    -H:在每一个匹配行之前加上文件名一起输出(针对于查找单个文件),当查找多个文件时默认就会输出文件名
    -h:禁止输出上的文件名的前缀。无论查找几个文件都不会在匹配内容前输出文件名
    --label = LABEL:显示实际来自标准输入的输入作为来自文件LABEL的输入。这是特别在实现zgrep等工具时非常有用,例如gzip -cd foo.gz | grep --label = foo -H的东西。看到 也是-H选项。
    -n:输出匹配内容的同时输出其所在行号。
    -T:初始标签确保实际行内容的第一个字符位于制表位上,以便对齐标签看起来很正常。在匹配信息和其前的附加信息之间加入tab以使格式整齐。
    

    上下文线控制选项:

    -A num:匹配到搜索到的行以及该行下面的num行
    -B num:匹配到搜索到的行以及该行上面的num行
    -C num:匹配到搜索到的行以及上下各num行
    

    文件和目录选择选项:

    -a: 处理二进制文件,就像它是文本;这相当于--binary-files = text选项。不忽略二进制的数据。  
     --binary-files = TYPE:如果文件的前几个字节指示文件包含二进制数据,则假定该文件为类型TYPE。默认情况下,TYPE是二进制的,grep通常输出一行消息二进制文件匹配,或者如果没有匹配则没有消息。如果TYPE不匹配,grep假定二进制文件不匹配;这相当于-I选项。如果TYPE是文本,则grep处理a二进制文件,如果它是文本;这相当于-a选项。警告:grep --binary-files = text可能会输出二进制的垃圾,如果输出是一个终端和如果可能有讨厌的副作用终端驱动程序将其中的一些解释为命令。
    -D:如果输入文件是设备,FIFO或套接字,请使用ACTION处理。默认情况下,读取ACTION,这意味着设备被读取,就像它们是普通文件一样。如果跳过ACTION,设备为 默默地跳过。
    -d:  如果输入文件是目录,请使用ACTION处理它。默认情况下,ACTION是读的,这意味着目录被读取,就像它们是普通文件一样。如果跳过ACTION,目录将静默跳过。如果ACTION是recurse,grep将递归读取每个目录下的所有文件;这是相当于-r选项。
    --exclude=GLOB:跳过基本名称与GLOB匹配的文件(使用通配符匹配)。文件名glob可以使用*,?和[...]作为通配符,和\引用通配符或反斜杠字符。搜索其文件名和GLOB通配符相匹配的文件的内容来查找匹配使用方法:grep -H --exclude=c* "old" ./*  c*是通配文件名的通配符./* 指定需要先通配文件名的文件的范围,必须要给*,不然就匹配不出内容,(如果不给*,带上-r选项也可以匹配)
    --exclude-from = FILE:在文件中编写通配方案,grep将不会到匹配方案中文件名的文件去查找匹配内容
    --exclude-dir = DIR:匹配一个目录下的很多内容同时还要让一些子目录不接受匹配,就使用此选项。
     --include = GLOB:仅搜索其基本名称与GLOB匹配的文件(使用--exclude下所述的通配符匹配)。
    -R ,-r :以递归方式读取每个目录下的所有文件; 这相当于-d recurse选项。
    

    其他选项:

    --line-buffered: 在输出上使用行缓冲。这可能会导致性能损失。
    --mmap:启用mmap系统调用代替read系统调用
    -U:将文件视为二进制。
    -z:将输入视为一组行,每一行由一个零字节(ASCII NUL字符)而不是a终止新队。与-Z或--null选项一样,此选项可以与排序-z等命令一起使用来处理任意文件名。
    
    展开全文
  • 今天在单独打印一份三页的目录Word文档时,所有目录的页码全部变为“错误!未定义书签!”,很是奇妙!一开始还以为是打印问题,又重新打印了一次,问题依旧。后来经过仔细研究,发现是“域”的问题。   解决...
  • freemarker打印word(目录,分页)

    千次阅读 2015-12-22 15:37:35
    最近项目需要打印导出word,要求(多页,有格式),之前用itext,不甚理想,主要是格式比较难调整,后来采用freemarker打印解决问题,这里做一些问题记录 一,使用的是struts2+freemarker.. 注意struts2中action的result中...
  • 打印

    千次阅读 2020-10-23 09:15:00
    在这章中,我们将会着手用于打印文件和控制打印选项的命令行工具。通常不同发行版的打印配置各有不同且都会在其安装时自动完成,因此这里我们不讨论打印的配置过程。本章的练习需要一台正确配置的打印机来完成。 ...
  • 1、WORD动态目录打印预览出现:错误 未定义书签 首先打开文档,点击打印预览,...法2:鼠标右击目录→更新域→更新页码 再次打开文档(先不急着打印)用鼠标选定目录页的内容。并按下Ctrl+F11这两个键。 再次预览,
  • os模块打印目录下所有文件路径

    千次阅读 2018-08-06 14:55:05
    利用os模块,打印出当前路径下的所有文件名,使用到了递归函数。 import os def print_dir_constents(sPath): #列出当前路径下的所有文件夹和文件 并进行遍历 for schild in os.listdir(sPath): #拼接地址 ...
  • gin的日志是默认打印在控制台的,这样管理起来并不方便。你们会说自己打印到文件去啊?是的,我想要自己打印到指定的文件还想要实现日志按照日期拆分的功能,以前公司的日志拆分都是运维利用linux的logrotate来实现...
  • c++实现对文件目录树形打印

    千次阅读 2008-09-27 09:34:00
    在遍历目录的同时打印目录.就这么简单,没啥技术含量,主要就是那些缩进格式和线条的控制,实现也相当的简单,只要在遍历的时候用一个循环就搞定了...就不多啰嗦了.看代码吧文件的开头首先定义两个字符串类型的常变量,...
  • Altium Designer怎么只打印丝印层

    万次阅读 2018-04-16 17:20:02
    在PCB的设计生产的时候,物料管理人员或者工厂经常需要...第二步:选择当前文件选项,选择好输出目录,如下图所示,点击下一步。第三步:取消勾选导出原材料的BOM表,如下图所示,点击下一步。第四步:这也是最重...
  • 显示树形目录结构 tree 显示目录 tree -d 显示两级目录 tree -d -L 2
  • 解决创建目录后出现的打印错误 利用Word的自动创建目录的功能,可以把Word文档的目录层次结构方便地作成目录,不但方便快捷,还会与原来文档一致。但是如果也需要显示页码,等到打印时往往发现打印的结果在目录后面...
  • javaFile类理解,案例:遍历某目录中的文件,并打印出文件的绝对路径
  •  如何形象地输出指定目录(文件夹)里的文件名?   主类: public class Main { public static void main(String[] args) { PrintDirectory pd = new PrintDirectory("C:\\Users\\HG\\Desktop\\day19&...
  • 如果仅仅是打印文件名称可以用以下代码;public class test3 { public static void main(String[] args) { File f=new File("G:\\1"); int count =0; method2(f); }public static void method2(File file){ ...
  • ls命令显示目录或文件

    万次阅读 2011-11-25 22:54:41
    显示目录 ls -F | grep "/$" ls -al | grep "^d" 同理显示文件 ls -al | grep "^-" -F 文件类型(File type)。在每一个列举项目之后添加一个符号。这些符号包括: / 表明是一个目录; @ 表明是到其它...
  • 前言 自己有个需求,如题,需要获取HDFS路径...想了一下用Spark好像不太容易获取到,还要递归的去获取子目录下的文件名,于是查了一下,最后用Hadoop的API搞定,这里记录下,方便以后会用到。 1、数据 测试路径:/tm...
  • C-lodop打印控件 实现批量打印

    千次阅读 2019-08-13 17:00:22
    有人说她是Web打印控件,因为她能打印、在浏览器中以插件的形式出现,用简单一行语句就把整个网页打印出来; 有人说她是打印编程接口,因为她介于浏览器和打印设备之间,是个通道和桥梁,几乎能想到的打印控制事项...
  • package pxyhomeworkday09; import java.io.File;...//如果去掉24行,并把返回值改为count+b,那么在一个文件夹下有多个文件夹的时候,程序返回一个文件夹的返回值,不同的递归方法返回值会被覆盖。
  • 背景:mybatis-plus有逆向工程根据模板生成mybatis的mapper,dao,service,controller代码...注意mybatis-puls的日志都是debug格式所以什么都不打印,正常的打印也没有,但是没有报错提示生成的目录,证明代码有一...
  • 为了清晰一点,我单独创建一个模块,目录结构如下: 如果有多处需要这种自定义打印按钮,实现打印功能的,可以单独创建打印模块,方便管理。 主要起作用的就是report_employee.py 和 report...
  • 需要替换的需要替换一下路径的保存地址。 %d - %msg%n <!--每天生成一个日志文件--> <!--根据范围来过滤--> <level>ERROR <onMatch>DENY <onMismatch>ACCEPT %msg%n ...
  • java 打印日志

    千次阅读 2013-01-11 21:24:02
    以前开发KJava游戏,没有开发多长时间,然后就转android上了,接触过android的都知道android有Log打印日志,最近由于工作需要,不得打印日志...虽然之前都是有打印一些信息,System.out.println();....发现是有点用...
  • MS-DOS命令范例 要将当前目录中的 Report.txt 发送到连上...要将 c:\Accounting 目录中的 Report.txt 文件发送到服务器 \\CopyRoom 上的 Printer1 打印队列,请键入: print /d:\\copyroom\printer1 c:\accountin
  • 最近接到一个需求,需要用电脑连接面单打印机,打印用户选中的某条数据。但是用户不想每次选中打印数据点击确定后还要...需要在桌面的谷歌浏览器快捷方式上右键选择属性,然后找到目标目录,在目标目录最后的双引...
  • 一、入门 1、启动HttpPrinter 双击 HttpPrinter_latest/...我们常用的 web打印 在 js 目录下 3、token 干嘛用的 token你可以理解为密码 发送的 token值 要 在 httpprinter的token列表里面 token列表的查看步骤: 系...
  • 打印管理

    千次阅读 2012-10-10 10:49:36
    目标 ...不过在1999年随着CUPS的出现,这种局面得到改观,所有的Unix及Linux都可以使用此打印系统,以支持用户的各种打印需求。我们在本章会了解到Unix的传统打印方式,而着重的是新兴的CUPS打印系统。
  • 轻松Java打印预览、Web打印

    万次阅读 2015-12-05 23:25:09
    Java打印的功能非常强大,你需要实现java.awt.print.Printable接口就可以了。而实现打印预览就不是已经容易的事情了,Jdk中没有提供标准的打印预览组件,翻页、缩放等功能都需要你完全编写。如果你想把打印结果...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 378,196
精华内容 151,278
关键字:

如何只打印目录