转自https://blog.csdn.net/xxn_723911/article/details/78795033

1.os.listdir(path='')

其中参数path为需要列出的目录路径。该函数返回指定的文件夹包含的文件或文件夹的名字的列表。

2.walk(top, topdown=True, οnerrοr=None, followlinks=False)
os.walk(path)返回三个值:parent, dirnames, filenames,分别表示path的路径、path路径下的文件夹的名字和path路径下文件夹以外的其他文件。

应用1:在一个目录下面只有文件时可以使用os.listdir()。
比如文件test_file文件中包含三个文件,即:
test_file:
         test1.txt
         test2.txt
         test3.txt
可以使用如下代码获取每个文件的绝对路径:
>>> import os
>>> path = r'C:\Users\XXN\Desktop\test_file'
>>> for each_file in os.listdir(path):
    print(os.path.join(path,each_file))

结果如下:
C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt

应用2:当一个目录下面既有文件又有目录(文件夹),可使用os.walk()读取里面所有文件。
比如文件test_file中既包含文件也包含文件夹:
Test_file:
        file1:
             test1.txt
             test2.txt
             test3.txt
        file2:
             test1.txt
             test2.txt
             test3.txt
        test1.txt
        test2.txt
        test3.txt
使用os.walk()可获得:
>>> import os
>>> path = r'C:\Users\XXN\Desktop\test_file'
>>> for parent,dirnames,filenames in os.walk(path):
    print(parent,dirnames,filenames)

结果如下:
C:\Users\XXN\Desktop\test_file ['file1', 'file2'] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file1 [] ['test1.txt', 'test2.txt', 'test3.txt']
C:\Users\XXN\Desktop\test_file\file2 [] ['test1.txt', 'test2.txt', 'test3.txt']
parent:列出了目录路径下面所有存在的目录的名称
dirnames:文件夹名
filenames:列出了目录路径下面所有文件的名称
通过下面代码可获得给定路径下所有的文件路径:
>>> import os
>>> path = r'C:\Users\XXN\Desktop\test_file'
>>> for parent,dirnames,filenames in os.walk(path):
    for filename in filenames:
        print(os.path.join(parent,filename))
 
结果如下:
C:\Users\XXN\Desktop\test_file\test1.txt
C:\Users\XXN\Desktop\test_file\test2.txt
C:\Users\XXN\Desktop\test_file\test3.txt
C:\Users\XXN\Desktop\test_file\file1\test1.txt
C:\Users\XXN\Desktop\test_file\file1\test2.txt
C:\Users\XXN\Desktop\test_file\file1\test3.txt
C:\Users\XXN\Desktop\test_file\file2\test1.txt
C:\Users\XXN\Desktop\test_file\file2\test2.txt
C:\Users\XXN\Desktop\test_file\file2\test3.txt

应用3:编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)
思路:1.先把当前文件夹下的.txt文件以及当前文件包含的子文件夹中的.txt文件的路径全部保存至一个txt_list列表中;2.以读取的方式打开txt_list中每个路径的文件,并将每个文件中出现关键字的行数以及关键字索引保存至一个字典dict_keywords中。3.按格式输出。
代码演示:
import os
def print_keywords(dict_keywords):
    keys = dict_keywords.keys()
    keys = sorted(keys)
    for each in keys:
        print('关键字出现在第 %s 行,第 %s 个位置。'% (each, str(dict_keywords[each])))
    
def line_keywords(line, keywords):
    key_index = []
    start = line.find(keywords)
    while start!=-1:
        key_index.append(start+1)
        start = line.find(keywords, start+1)
    return key_index       
    
 
def file_keywords(filename, keywords):
    f = open(filename,'r')
    line = 0
    dict_keywords = dict()
    for each_line in f:
        line +=1
        if keywords in each_line:
                key_index = line_keywords(each_line, keywords)
                dict_keywords[line]= key_index
    f.close()
    return dict_keywords
 
    
def file_search(keywords, flag):
    all_files = os.walk(os.getcwd())
    txt_list = []
 
    for each in all_files:
        for filename in each[2]:
            if os.path.splitext(filename)[1] == '.txt':
                txt_list.append(os.path.join(each[0],filename))
 
    for each_txt_file in txt_list:
        dict_keywors = file_keywords(each_txt_file, keywords)
        print('====================================================')
        print('在文件【%s】中找到关键字【%s】' % (each_txt_file, keywords))
 
        if flag in ['YES', 'Yes', 'yes']:
              print_keywords(dict_keywors)
        
keywords = input("请将该脚本放于待查找的文件夹中,请输入关键字:")
flag = input("请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):")
file_search(keywords, flag)
运行结果如下:

Python获取文件路径:os.listdir()和os.walk()相关推荐

  1. python获取文件路径下的文件_python 获取文件下所有文件或目录os.walk()的实例

    在python3.6版本中去掉了os.path.walk()函数 os.walk() 函数声明:walk(top,topdown=True,oneerror=None) 1.参数top表示需要遍历的目 ...

  2. python获取文件路径下指定的类型的文件_python学习1-列出指定目录下的指定类型文件...

    列出指定目录下的指定类型文件 import sys import os import getopt def DisplayFileAndPath(directory, pfix, pfixset=Fa ...

  3. python获取文件路径

    <code class="language-python">import os base_dir = os.path.dirname(__file__) # 获取当前文 ...

  4. python 如何获取文件路径_Python如何获取文件路径/目录

    一.获取文件路径实现 1.1 获取当前文件路径 import os current_file_path = __file__ print(f"current_file_path: {curr ...

  5. python合并路径和文件名,python关于文件路径和文件名的操作

    os.path.abspath(path) #返回绝对路径(包含文件名的全路径) os.path.basename(path) -- 去掉目录路径获取文件名 os.path.dirname(path) ...

  6. python 获取文件夹所有文件列表_python获取文件夹下所有文件及os模块方法

    python获取文件夹下所有文件 方法一:使用os.listdir import os for filename in os.listdir(r'c:\windows'): print filenam ...

  7. 详细讲解Python遍历目录的文件夹(dir)、文件(file)的三种方法:os.listdir、os.walk和os.scandir

    在使用Python开发项目的时候,会遇到需要遍历文件夹.文件的需求,我整理了三种主流方法:os.listdir.os.walk和os.scandir,并进行了详细的讲解. 用于实验的目录: .test ...

  8. python获取文件路径名_python文件名获取文件路径

    如何使用Python获取文件所在目录和文件名 python中如何根据文件名找他的路径.现在我遍历到怎么才能将某一个文件对应的路径找到呢? 遍历用os.walk: import osfrom os.pa ...

  9. python获取绝对路径_python文件绝对路径写法介绍(windows)

    python文件绝对路径写法介绍(windows) python在描述路径时有两种方式: 'd:\\a.txt',转义的方式 r'd:\a.txt',声明字符串不需要转义 (使用raw string, ...

最新文章

  1. 博士申请 | 澳门大学汪澎洋助理教授招收机器学习方向全奖博士生
  2. 月饼哪家强?Python 告诉你
  3. 二级域名session共享php本地,PHP二级域名session共享方案
  4. MySQL学习(四)查询
  5. 后端:Java中的BigDecimal类你了解多少?
  6. sketch浮动布局_使用智能布局和调整大小在Sketch中创建更好的可重用符号
  7. 解读 Knative Eventing v0.10.0 最新版本特性
  8. mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步
  9. 用postman做接口测试
  10. kafka集群安装部署
  11. Android开发笔记(一百一十二)开发工具
  12. 渐进式 Web 应用程序是移动开发的未来吗?
  13. PowerPoint优点全体验
  14. Stopwatch 类
  15. actor模型 java框架,actor模型(actor模式优缺点)
  16. JAVA项目实战开发电商项目案例(一)前后端项目分离
  17. 磁链转种子,种子转磁链
  18. 如何快速提高视唱练耳能力
  19. [Inside HotSpot] C1编译器HIR的构造
  20. 轻松管好团队,就靠RACI模型|优思学院

热门文章

  1. ASP.NET配置FCKeditor文本编辑器
  2. [转载] python enumerate函数 实例_python中使用enumerate函数遍历元素实例
  3. 如何从应用直接跳转AppStore 电话 短信 邮件
  4. java的前台与后台
  5. iOS: AFNetworking手动配置(iOS7.1, AF2.2.4)
  6. 关于多维数组编码与解码的问题
  7. 微软silverlight视频教程
  8. [转载]Informix平安特征庇护数据的详细方法
  9. 在AJAX中可以使用的Response.Redirect 的冲突解决办法
  10. 离开,是一个新的开始