您现在的位置是:首页 > 正文

【Python数据挖掘入门】2.1 文本分析-语料库文件读取(os.walk&os.path.join方法)

2024-01-30 21:15:46阅读 0

示例数据为Sogou实验室提供的语料数据,下载地址如下:
链接: https://pan.baidu.com/s/1vtHxR4zuEiGd3ot_wj4oeQ 提取码: sh7y

一、 使用os使用示例

使用os.path模块中的os.walk 方法和os.path.join方法,将一个文件夹及文件夹中的全路径读入内存
读取示例:

import os
import os.path

filepath = []
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.path

for 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系统下,路径既可以使用斜杠连接,也可以使用反斜杠连接。

网站文章

  • 正在与拖延症病魔抗争中

    自从上了大学以来,慢慢地养成了拖延症,做什么事情都在不停地拖延。直到大三之后,症状越发严重,真的影响到了正常的工作生活,于是开始了漫长的跟拖延症病魔抗争的道路。曾经研究出,做计划并严格实施是最好的客服拖延症的方法,但是后来发展成了拖延做计划。拖延症是一种人自身潜意识的拒绝,在这里寻求一下网络上大家是怎么做来客服拖延症的。转载自:http://www.douban.com/group...

    2024-01-30 21:15:18
  • 操作系统大内核和微内核_操作系统中的内核

    操作系统大内核和微内核_操作系统中的内核

    操作系统大内核和微内核A Kernel is the central component of an Operating System. The Kernel is also said to be t...

    2024-01-30 21:15:10
  • C语言学习_DAY_1_详解第一个程序

    C语言学习_DAY_1_详解第一个程序

    在专栏的第一篇文章,也就是IDE安装的文章中,最后给出了用来测试IDE是否正常工作的代码。这行代码以井号开头,这表明该行是一个预编译的部分,所谓预编译就是在代码编译之前,首先要执行的部分

    2024-01-30 21:15:05
  • 解决UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position...

    解决UnicodeEncodeError: 'ascii' codec can't encode characters in position... 在容器中使用 python...

    2024-01-30 21:14:36
  • hadoop3.3.1详细安装与配置

    hadoop3.3.1详细安装与配置

    hadoop详细配置

    2024-01-30 21:14:23
  • Alibaba Cloud Linux 2 开源后又有什么新动作?

    Alibaba Cloud Linux 2 开源后又有什么新动作?

    阿里妹导读:2019 年 4 月,Alibaba Cloud Linux 2 (Aliyun Linux 2) 正式开源。时至今日,已经走过三个月的里程。在这段时间内,这...

    2024-01-30 21:13:52
  • 聚合关系和组成关系

    聚合关系和组成关系

    一聚合关系聚合关系描述了一个较大的事务(整体),是由较小事务(部分)组成的。公司和部门、部门和员工之间是聚合关系。聚合关系用一个空心菱形表示,菱形要画在“较大的事务”一侧。1常见存在聚合关系的类聚合关...

    2024-01-30 21:13:44
  • TypeScript---Babel的配置

    经过一系列的配置,使得TS和webpack已经结合到了一起,除了webpack,开发中还经常需要结合babel来对代码进行转换以使其可以兼容到更多的浏览器,在上述步骤的基础上,通过以下步骤再将babe...

    2024-01-30 21:13:37
  • 关于Camera.PreviewCallback的调用的三个方式

    ● Camera.PreviewCallback:定义了onPreviewFrame(byte[] data, Camera camera) 方法,当存在预览帧(preview frame)时调用该方法。可以传入保存当前图像像素的字节数组。在Camera对象上,有3种不同的方式使用这个回调: · setPreviewCallback(Camera.PreviewCallback):使用此

    2024-01-30 21:13:29
  • 备份gitlab代码仓库脚本

    备份gitlab代码仓库脚本

    我的gitlab在docker容器里面,而映射的数据路径是/home/gitlab/data下,如果你的gitlab是原生方式安装,请以实际路径为准,一般在/var/opt/gitlab/backup...

    2024-01-30 21:13:01