python中想要读取多个文件的数据时,首先便是要获取目标文件的路径名称。而遍历文件夹寻找目标文件可通过os或pathlib库实现,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文件中第一行通常是数据名称,可通过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列表中
作者水平有限,文中若有错误望大家指出,共同学习,共同进步