Python遍历文件夹 寻找目标文件 读取txt文件数据

         python中想要读取多个文件的数据时,首先便是要获取目标文件的路径名称。而遍历文件夹寻找目标文件可通过ospathlib库实现,pathlib相对来说代码更为精炼,本文将使用pathlib实现文件夹遍历,并以txt文件为例寻找目标文件,读取数据。

文件夹遍历

首先导入库函数,遍历指定文件夹下所有指定类型的文件(txt为例)

from pathlib import Path  # 导入库

def find_all_files(files_path):
    """遍历指定文件夹所有指定类型文件"""
    p = Path(files_path)
    files_names = []  # 存储文件路径名称
    for file in p.rglob('*.txt'):  # 寻找所有txt文件
        files_names.append(str(file))  # 以字符串形式保存

    return files_names 

files_path = 'E:/Desktop/GitHub'  # 文件夹
files_names = find_all_files(files_path)  # 获取所有文件路径名称

寻找目标文件

在上述所有txt文件中寻找符合条件的目标文件,比如命名符合一定规则的文件

def object_files(files_names, key_word):
    """找出目标文件"""
    files = []  # 存储符合条件的目标文件路径名称
    for i in files_names:  # 遍历所有文件
        if key_word in i:  # key_word表示文件命名中存在的关键词 可根据关键词筛选文件
            files.append(i)  # 若文件名称中存在关键词 则将其保存在列表中
    
    return files  # 返回目标文件路径名称

# 例如每次实验数据都保存一个文件夹,第一个样本数据命名为'obj_1'
# 则可通过设置'obj_1'关键词找出第一个样本的多次实验数据
files_path = 'E:/Desktop/GitHub'  # 文件夹
key_word = 'obj_1'  # 关键词
files_names = find_all_files(files_path)  # 所有文件路径名称
object_files_names = object_files(files_names, key_word)  # 目标文件路径名称

找出所有目标文件名称,则可以遍历实现读取其中的数据,不用一个个手动输入

读取txt文件数据

txt文件中第一行通常是数据名称,可通过itertllos.islice跳过前n行,不读取前n行数据

import numpy as np
from itertools import islice

def load_dataset(filename):
    """导入txt文件数据"""
    dataset = []  # 保存读取的数据
    with open(filename, 'r') as file_obj:  # 打开文件
        for line in islice(file_obj, 2, None): # 跳过前2行数据
            if not line:  # 如果存在空白行则执行下一次循环,跳过空白行
                continue
            line_arr = []  # 用于存储每一行的数据
            # 将每一行数据按照空格分开 若是逗号则为line.split(',')
            for i, data in enumerate(line.split()):
                if i < 10:  # 数据截止在第10列 i表示第几个数据
                    data_value = data.strip()  # 删除数字两边的空格
                    line_arr.append(str(data_value))  # 若文件中有字符,则需字符串格式保存 
            dataset.append(line_arr)  # 将每一行数据保存

    dataset.pop(-1)  # 若最后一行数据不完全,则可删除
    dataset = np.array(dataset)  # 列表转换为数组
    # 若文件中存在不需要的数据,则可进行删减;或者需要一些数据处理等操作
    dataset = np.delete(dataset,[0,1,3], axis=1)  # 删除不需要的列
    dataset = dataset.astype(float)  # 将字符串转换为浮点数
    dataset[:, 4:7] = dataset[:, 4:7] * np.pi / 180  # 角度换算弧度 

    return dataset

if __name__ == '__main__':
    files_path = 'E:/Desktop/GitHub'  # 文件夹
    key_word = 'obj_1'  # 关键词
    files_names = find_all_files(files_path)  # 所有文件路径名称
    object_files_names = object_files(files_names, key_word)  # 目标文件路径名称

    dataset = []  # 用于存储数据
    for filename in object_files_names:  
        data_one = load_dataset(filename)  # 遍历目标文件,读取数据
        dataset.append(data_one)  # 将所有文件的数据保存在dataset列表中

        作者水平有限,文中若有错误望大家指出,共同学习,共同进步

你可能感兴趣的:(python)