示例数据为Sogou实验室提供的语料数据,下载地址如下:
链接: https://pan.baidu.com/s/1vtHxR4zuEiGd3ot_wj4oeQ 提取码: sh7y
一、 使用os使用示例
使用os.path
模块中的os.walk
方法和os.path.join
方法,将一个文件夹及文件夹中的全路径读入内存
读取示例:
import os
import os.pathfilepath = []
dirspath = []
for root, dirs, files in os.walk("D:\SogouC.mini\Sample"):#root表示当前正在访问的文件夹路径#dirs 表示该文件夹下的目录名list#files 表示该文件夹下的文件list#遍历文件:for name in files:filepath.append(os.path.join(root,name))#将root和files拼接并读入filepath中#遍历所有的文件夹:for d in dirs:dirspath.append(os.path.join(root,d))#将root和dirs拼接并读入dirspath中
"""
变量查看
filespath:['D:\\SogouC.mini\\Sample\\C000007\\10.txt', 'D:\\SogouC.mini\\Sample\\C000007\\11.txt', 'D:\\SogouC.mini\\Sample\\C000007\\12.txt', 'D:\\SogouC.mini\\Sample\\C000007\\13.txt', 'D:\\SogouC.mini\\Sample\\C000007\\14.txt', 'D:\\SogouC.mini\\Sample\\C000007\\15.txt', 'D:\\SogouC.mini\\Sample\\C000007\\16.txt', 'D:\\SogouC.mini\\Sample\\C000007\\17.txt', 'D:\\SogouC.mini\\Sample\\C000007\\18.txt', 'D:\\SogouC.mini\\Sample\\C000007\\19.txt', 'D:\\SogouC.mini\\Sample\\C000008\\10.txt', 'D:\\SogouC.mini\\Sample\\C000008\\11.txt', 'D:\\SogouC.mini\\Sample\\C000008\\12.txt', 'D:\\SogouC.mini\\Sample\\C000008\\13.txt', 'D:\\SogouC.mini\\Sample\\C000008\\14.txt', 'D:\\SogouC.mini\\Sample\\C000008\\15.txt', 'D:\\SogouC.mini\\Sample\\C000008\\16.txt', 'D:\\SogouC.mini\\Sample\\C000008\\17.txt', 'D:\\SogouC.mini\\Sample\\C000008\\18.txt', 'D:\\SogouC.mini\\Sample\\C000008\\19.txt', 'D:\\SogouC.mini\\Sample\\C000010\\10.txt', 'D:\\SogouC.mini\\Sample\\C000010\\11.txt', 'D:\\SogouC.mini\\Sample\\C000010\\12.txt', 'D:\\SogouC.mini\\Sample\\C000010\\13.txt', 'D:\\SogouC.mini\\Sample\\C000010\\14.txt', 'D:\\SogouC.mini\\Sample\\C000010\\15.txt', 'D:\\SogouC.mini\\Sample\\C000010\\16.txt', 'D:\\SogouC.mini\\Sample\\C000010\\17.txt', 'D:\\SogouC.mini\\Sample\\C000010\\18.txt', 'D:\\SogouC.mini\\Sample\\C000010\\19.txt', 'D:\\SogouC.mini\\Sample\\C000013\\10.txt', 'D:\\SogouC.mini\\Sample\\C000013\\11.txt', 'D:\\SogouC.mini\\Sample\\C000013\\12.txt', 'D:\\SogouC.mini\\Sample\\C000013\\13.txt', 'D:\\SogouC.mini\\Sample\\C000013\\14.txt', 'D:\\SogouC.mini\\Sample\\C000013\\15.txt', 'D:\\SogouC.mini\\Sample\\C000013\\16.txt', 'D:\\SogouC.mini\\Sample\\C000013\\17.txt', 'D:\\SogouC.mini\\Sample\\C000013\\18.txt', 'D:\\SogouC.mini\\Sample\\C000013\\19.txt', 'D:\\SogouC.mini\\Sample\\C000014\\10.txt', 'D:\\SogouC.mini\\Sample\\C000014\\11.txt', 'D:\\SogouC.mini\\Sample\\C000014\\12.txt', 'D:\\SogouC.mini\\Sample\\C000014\\13.txt', 'D:\\SogouC.mini\\Sample\\C000014\\14.txt', 'D:\\SogouC.mini\\Sample\\C000014\\15.txt', 'D:\\SogouC.mini\\Sample\\C000014\\16.txt', 'D:\\SogouC.mini\\Sample\\C000014\\17.txt', 'D:\\SogouC.mini\\Sample\\C000014\\18.txt', 'D:\\SogouC.mini\\Sample\\C000014\\19.txt', 'D:\\SogouC.mini\\Sample\\C000016\\10.txt', 'D:\\SogouC.mini\\Sample\\C000016\\11.txt', 'D:\\SogouC.mini\\Sample\\C000016\\12.txt', 'D:\\SogouC.mini\\Sample\\C000016\\13.txt', 'D:\\SogouC.mini\\Sample\\C000016\\14.txt', 'D:\\SogouC.mini\\Sample\\C000016\\15.txt', 'D:\\SogouC.mini\\Sample\\C000016\\16.txt', 'D:\\SogouC.mini\\Sample\\C000016\\17.txt', 'D:\\SogouC.mini\\Sample\\C000016\\18.txt', 'D:\\SogouC.mini\\Sample\\C000016\\19.txt', 'D:\\SogouC.mini\\Sample\\C000020\\10.txt', 'D:\\SogouC.mini\\Sample\\C000020\\11.txt', 'D:\\SogouC.mini\\Sample\\C000020\\12.txt', 'D:\\SogouC.mini\\Sample\\C000020\\13.txt', 'D:\\SogouC.mini\\Sample\\C000020\\14.txt', 'D:\\SogouC.mini\\Sample\\C000020\\15.txt', 'D:\\SogouC.mini\\Sample\\C000020\\16.txt', 'D:\\SogouC.mini\\Sample\\C000020\\17.txt', 'D:\\SogouC.mini\\Sample\\C000020\\18.txt', 'D:\\SogouC.mini\\Sample\\C000020\\19.txt', 'D:\\SogouC.mini\\Sample\\C000022\\10.txt', 'D:\\SogouC.mini\\Sample\\C000022\\11.txt', 'D:\\SogouC.mini\\Sample\\C000022\\12.txt', 'D:\\SogouC.mini\\Sample\\C000022\\13.txt', 'D:\\SogouC.mini\\Sample\\C000022\\14.txt', 'D:\\SogouC.mini\\Sample\\C000022\\15.txt', 'D:\\SogouC.mini\\Sample\\C000022\\16.txt', 'D:\\SogouC.mini\\Sample\\C000022\\17.txt', 'D:\\SogouC.mini\\Sample\\C000022\\18.txt', 'D:\\SogouC.mini\\Sample\\C000022\\19.txt', 'D:\\SogouC.mini\\Sample\\C000023\\10.txt', 'D:\\SogouC.mini\\Sample\\C000023\\11.txt', 'D:\\SogouC.mini\\Sample\\C000023\\12.txt', 'D:\\SogouC.mini\\Sample\\C000023\\13.txt', 'D:\\SogouC.mini\\Sample\\C000023\\14.txt', 'D:\\SogouC.mini\\Sample\\C000023\\15.txt', 'D:\\SogouC.mini\\Sample\\C000023\\16.txt', 'D:\\SogouC.mini\\Sample\\C000023\\17.txt', 'D:\\SogouC.mini\\Sample\\C000023\\18.txt', 'D:\\SogouC.mini\\Sample\\C000023\\19.txt', 'D:\\SogouC.mini\\Sample\\C000024\\10.txt', 'D:\\SogouC.mini\\Sample\\C000024\\11.txt', 'D:\\SogouC.mini\\Sample\\C000024\\12.txt', 'D:\\SogouC.mini\\Sample\\C000024\\13.txt', 'D:\\SogouC.mini\\Sample\\C000024\\14.txt', 'D:\\SogouC.mini\\Sample\\C000024\\15.txt', 'D:\\SogouC.mini\\Sample\\C000024\\16.txt', 'D:\\SogouC.mini\\Sample\\C000024\\17.txt', 'D:\\SogouC.mini\\Sample\\C000024\\18.txt', 'D:\\SogouC.mini\\Sample\\C000024\\19.txt']
dirspath:['D:\\SogouC.mini\\Sample\\C000007', 'D:\\SogouC.mini\\Sample\\C000008', 'D:\\SogouC.mini\\Sample\\C000010', 'D:\\SogouC.mini\\Sample\\C000013', 'D:\\SogouC.mini\\Sample\\C000014', 'D:\\SogouC.mini\\Sample\\C000016', 'D:\\SogouC.mini\\Sample\\C000020', 'D:\\SogouC.mini\\Sample\\C000022', 'D:\\SogouC.mini\\Sample\\C000023', 'D:\\SogouC.mini\\Sample\\C000024']"""
二、os方法详解
1.os.walk()
我们来详细看下os.walk的运行逻辑:
os.walk(a)方法中,a是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。
- root 所指的是当前正在遍历的这个文件夹的本身的地址
- dirs 是一个 list ,内容是该文件夹中所有的子文件夹的名字(不包括再下级目录),若只有文件无子文件夹,则为空。
- files 同样是 list , 内容是该文件夹中所有的文件(不包括再下级目录),若只有子文件夹无文件,则为空。
遍历的文件结构如下(过长,重复内容已省略):
Sample:.
├─C000007
│ 10.txt
│ 11.txt
│ 12.txt
│ 13.txt
│ 14.txt
│ 15.txt
│ 16.txt
│ 17.txt
│ 18.txt
│ 19.txt
│
├─C000008
│ 同C000007
├─C000010
│ 同C000007
├─C000013
│ 同C000007
├─C000014
│ 同C000007
├─C000016
│ 同C000007
├─C000020
│ 同C000007
├─C000022
│ 同C000007
├─C000023
│ 同C000007
└─C000024
同C000007
下面来看下遍历过程
import os.pathfor root, dirs, files in os.walk("D:\SogouC.mini\Sample"):print("root:",root)print("dirs:",dirs)print("files:",files)"""
运行结果:
第一次遍历:读取第一层,只有子文件夹,无文件,files为空
root: D:\SogouC.mini\Sample
dirs: ['C000007', 'C000008', 'C000010', 'C000013', 'C000014', 'C000016', 'C000020', 'C000022', 'C000023', 'C000024']
files: []第二次遍历:读取第二层中的第一个文件夹C000007,无子文件夹,dirs为空
root: D:\SogouC.mini\Sample\C000007
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']第三次遍历:读取第二层中的第二个文件夹C000008,无子文件夹,dirs为空
root: D:\SogouC.mini\Sample\C000008
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']第四次遍历:读取第二层中的第三个文件夹C0000010,无子文件夹,dirs为空
root: D:\SogouC.mini\Sample\C000010
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']以下为重复操作,第五次
root: D:\SogouC.mini\Sample\C000013
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
第六次
root: D:\SogouC.mini\Sample\C000014dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
七
root: D:\SogouC.mini\Sample\C000016
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
八
root: D:\SogouC.mini\Sample\C000020
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
九
root: D:\SogouC.mini\Sample\C000022
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
十
root: D:\SogouC.mini\Sample\C000023
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
十一
root: D:\SogouC.mini\Sample\C000024
dirs: []
files: ['10.txt', '11.txt', '12.txt', '13.txt', '14.txt', '15.txt', '16.txt', '17.txt', '18.txt', '19.txt']
"""
可以看到输出了十一次root、dirs、files
这是因为1个根目录、加上10个子目录,一共11个目录,所以会遍历4次。
另外os.walk
的遍历文件方式是深度遍历,即会在第一个子文件夹中遍历至叶子节点后,再遍历其他子文件夹。
2. os.path.join()
os.path.join()函数用于路径拼接文件路径。使用要点:
- 如果各组件名首字母不包含’/’,则函数会自动加上’/’;
- 如果有一个组件是一个绝对路径,即带有‘/’,则在它之前的所有组件均会被舍弃;
- 如果最后一个组件为空,则生成的路径以一个’/’分隔符结尾;
- 如果不显示地添加斜杠‘/’,那么程序会自动添加反斜杠‘\’;
- 要使用斜杠,就在所有路径的后面都添加上‘/’,否则会导致斜杠和反斜杠混乱!!
- 在Windows系统下,路径既可以使用斜杠连接,也可以使用反斜杠连接。