【数据清洗】从txt读取行文本,并存成一个list

本文介绍了一种使用Python读取TXT文件并处理其中的字符串数据的方法,包括如何利用strip()函数去除字符串两端的换行符,以及如何将读取到的数据存储为列表进行后续处理。此外,还演示了如何判断特定字符串是否存在于列表中。

TXT:
IQIYI_VID_TRAIN_0000001.mp4
IQIYI_VID_TRAIN_0000002.mp4
IQIYI_VID_TRAIN_0000003.mp4
IQIYI_VID_TRAIN_0000004.mp4
IQIYI_VID_TRAIN_0000005.mp4
IQIYI_VID_TRAIN_0000006.mp4
IQIYI_VID_TRAIN_0000008.mp4
IQIYI_VID_TRAIN_0000009.mp4
IQIYI_VID_TRAIN_0000010.mp4

import sys
result=[]

with open('VID.txt', 'r') as f:
    for line in f:
        result.append(line.strip('\n'))

print(len(result))
print(result)
str = 'IQIYI_VID_TRAIN_0000004.mp4'

if str in result:
    print('yes')
else:
    print('no')

工具:
1.strip():用于移除字符串头尾指定的字符,默认为空格,返回是字符串
2.split():通过指定分隔符对字符串进行切片,返回是字符串组成的list
输出:
[‘IQIYI_VID_TRAIN_0000001.mp4’, ‘IQIYI_VID_TRAIN_0000002.mp4’, ‘IQIYI_VID_TRAIN_0000003.mp4’, ‘IQIYI_VID_TRAIN_0000004.mp4’, ‘IQIYI_VID_TRAIN_0000005.mp4’, ‘IQIYI_VID_TRAIN_0000006.mp4’, ‘IQIYI_VID_TRAIN_0000008.mp4’, ‘IQIYI_VID_TRAIN_0000009.mp4’, ‘IQIYI_VID_TRAIN_0000010.mp4’]
yes

import numpy as np # 导入numpy命名为np import os # 导入os库 os模块是整理文件和目录最为常用的库,其提供丰富的方法来处理文件和目录 from sklearn.model_selection import cross_val_score # 从sklearn库的model_selection类中导入cross_val_score方法用来通过交叉验证选择最佳k值 from sklearn.neighbors import KNeighborsClassifier # 从sklearn库的neighbors类中导入KNeighborsClassifier方法用来生成k近邻分类器 from sklearn.metrics import precision_score # 从sklearn库的metrics类中导入precision_score方法用来计算分类器的精确率(查准率) from sklearn.metrics import recall_score # 从sklearn库的metrics类中导入recall_score方法用来计算分类器的召回率(查全率) import matplotlib.pyplot as plt raw_data = b'123\x00456' # 示例含空字符的二进制数据 # 方案A:移除所有空字符 clean_str = raw_data.decode('utf-8').replace('\x00', '') number = int(clean_str) # 123456 # 从matplotlib中导入导入pyplot类并定义一个别名plt # 2定义将图像转化为向量的函数 def img2vector(filename): # 定义将图像转化为向量的函数 # 为了使用KNN模型,我们需要将图片转化为一个向量。由于图片大小为32*32,故需要一个1024大小的向量存储。 # filename文件目录名 # 函数返回的向量array # 创建向量 vect = np.zeros(1024) fr = open(filename) # 打开数据文件,并将每的字符转换整形数字放在向量vect中 for i in range(32): # 循环读取一行 line_str = fr.readline() for j in range(32): # 将每前32字符转int存入向量 vect[32 * i + j] = int(line_str[j]) return vect # 3从文件夹中读取数据,获得训练数据和测试数据 def obtain_train_test(): """读取训练集和测试集数据""" # 处理训练数据 train_text_name = os.listdir('Data/trainingDigits') # 测试数据的文件名列表 # os.listdir(path)中有一个参数,就是传入相应的路径,将会返回那个目录下的所有文件名 num_train = len(train_text_name) # 用于测试的txt文件个数 train_matrix = np.zeros((num_train, 1024)) # 初始化测试样本数据矩阵,矩阵的每一行对应由一个测试数据集中图像转换而的向量 label_train = [] for i in range(num_train): # 依次读取测试数据集文件夹中所有测试样本数据到矩阵train_matrix中 # 提取文件名中的数字 text_name = train_text_name[i] # 第i个测试数据的文件名 # 去掉.txt name_str = text_name.split('.')[0] # split()方法是用来拆分字符串,通过指定分隔符对字符串进切片,并返回分割后的字符串列表(list) # 因此text_name.split('.')[0]存储的是字符串text_name中.前面的内容 # 获取第一个字符,即它是哪一个数字 # 下面提取每一个测试数据(图像,txt文件)对应的数字 label_num = int(name_str.split('_')[0]) # 首先用分隔符对字符串name_str进切片,并返回分割后的字符串列表(list) # 再提取分割后的字符串列表中的第0个元素,因此name_str.split('_')[0]存储的是字符串name_str中_前面的内容 # 最后将其转换为整形,若测试数据的txt文件名称为0_1.txt,则label_num = 0,表示该测试数据的标签为0 label_train.append(label_num) # 保存训练数据标签 # 下面将训练样本存入矩阵train_matrix train_matrix[i, :] = img2vector('Data/trainingDigits/' + text_name) # 将Data/trainingDigits/下的每一个tex文件转换一个向量并存放在train_matrix中第i # 处理测试数据 test_text_name = os.listdir('Data/testDigits') # 测试数据的文件名列表 # os.listdir(path)中有一个参数,就是传入相应的路径,将会返回那个目录下的所有文件名 num_test = len(test_text_name) # 用于测试的txt文件个数 test_matrix = np.zeros((num_test, 1024)) # 初始化测试样本数据矩阵,矩阵的每一行对应由一个测试数据集中图像转换而的向量 label_test = [] for i in range(num_test): # 依次读取测试数据集文件夹中所有测试样本数据到矩阵test_matrix中 # 提取文件名中的数字 text_name = test_text_name[i] # 第i个测试数据的文件名 # 去掉.txt name_str = text_name.split('.')[0] # split()方法是用来拆分字符串,通过指定分隔符对字符串进切片,并返回分割后的字符串列表(list) # 因此text_name.split('.')[0]存储的是字符串text_name中.前面的内容 # 获取第一个字符,即它是哪一个数字 # 下面提取每一个测试数据(图像,txt文件)对应的数字 label_num = int(name_str.split('_')[0]) # 首先用分隔符对字符串name_str进切片,并返回分割后的字符串列表(list) # 再提取分割后的字符串列表中的第0个元素,因此name_str.split('_')[0]存储的是字符串name_str中_前面的内容 # 最后将其转换为整形,若测试数据的txt文件名称为0_1.txt,则label_num = 0,表示该测试数据的标签为0 label_test.append(label_num) # 保存训练数据标签 # 下面将训练样本存入矩阵train_matrix test_matrix[i, :] = img2vector('Data/testDigits/' + text_name) # 将Data/trainingDigits/下的每一个tex文件转换一个向量并存放在test_matrix中第i return train_matrix, label_train, test_matrix, label_test # 获取训练和测试数据 train_matrix, label_train, test_matrix, label_test = obtain_train_test() # 检查类别分布并确定合适的交叉验证折数 unique, counts = np.unique(label_train, return_counts=True) class_distribution = dict(zip(unique, counts)) print("类别分布:", class_distribution) min_samples = min(counts) cv_folds = min(10, min_samples) # 确保折数不超过最小类别样本数 print(f"使用{cv_folds}折交叉验证") # 首先使用训练集通过交叉验证确定最优的k k_range = range(1, 14) # 生成1到14,k_range是k的取值范围 cv_score_acc = [] # 用来存放每个k对应的精确率 for k in k_range: knn = KNeighborsClassifier(k) score_acc = cross_val_score(knn, train_matrix, label_train, cv=cv_folds, scoring='accuracy') # 每种类型的训练样本差异不大,因此可以用准确率评估模型性能 cv_score_acc.append(score_acc.mean()) plt.plot(k_range,cv_score_acc) plt.xlabel('k') plt.ylabel('accuracy') plt.show() # 对该训练数据最优的k值 # 使用最优的k值和训练数据训练出一个knn分类器,对测试数据进预测,并对结果进评价分析 # 使用最优k值和训练数据训练出一个knn分类器 knn = KNeighborsClassifier(k_opt) # 实例化 knn.fit(train_matrix,label_train) # 使用训练数据训练 label_test_pred = knn.predict(test_matrix) # 使用训练好的knn分类器对测试数据进预测 acc_test = 1 - sum(label_test_pred != label_test) / len(label_test) # 测试数据的准确性 precision_micro = precision_score(label_test,label_test_pred,average='micro') precision_macro = precision_score(label_test,label_test_pred,average='macro') recall_micro = recall_score(label_test,label_test_pred,average='micro') recall_macro = recall_score(label_test,label_test_pred,average='macro') print('测试集上的准确率为:',acc_test) print('测试集上的micro_精确率为:',precision_micro) print('测试集上的macro_精确率为:',precision_macro) print('测试集上的micro_召回率为:',recall_micro) print('测试集上的macro_召回率为:',recall_macro) 帮我完善修改
最新发布
10-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值