数据处理笔记

1.利用read_csv读取txt文档

例1:原始数据是txt文档,格式如下所示:
在这里插入图片描述

# 导入必备工具包

import pandas as pd
from sklearn.model_selection import train_test_split

#这里第二个参数sep="\t"表示分隔符为"\t",
#获取数据内容。pandas.read_csv(“data.csv”)默认情况下,会把数据内容的第一行默认为字段名标题。添加“header=None”,告诉函数,我们读取的原始文件数据没有列索引。因此,read_csv为自动加上列索引。
train_data1 = pd.read_csv("./约会配对数据集/datingTestSet2.txt", sep="\t")
print(train_data1)#结果如图一
train_data2 = pd.read_csv("./约会配对数据集/datingTestSet2.txt", sep="\t",header=None)
print(train_data2)#结果如图二

在这里插入图片描述
例2:原始数据是txt文档,格式如下所示:
在这里插入图片描述

# 导入必备工具包
import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
# 设置显示风格
plt.style.use('fivethirtyeight') 

# 读取训练tsv,这里第二个参数sep="\t"表示分隔符为"\t"
train_data = pd.read_csv("./cn_data/train.tsv", sep="\t")
print(train_data)#结果如图一


# 获得训练数据标签数量分布
sns.countplot("label", data=train_data)
plt.title("train_data")
plt.show()#结果如图二

在这里插入图片描述

2.将txt格式数据转化为csv格式数据

原始数据:
在这里插入图片描述

import pandas as pd
import csv


#将txt转化为csv格式
data_path='./约会配对数据集/datingTestSet2.txt'
#下面函数第一个参数是txt文档数据的路径,第二个参数是要保存的路径;该函数的功能是将txt文档转化为csv格式
def txt_to_csv(read_path,save_path):
    with open(save_path, 'w+', newline='') as csvfile:
        spamriter = csv.writer(csvfile, dialect='excel')
        with open(read_path, 'r',encoding='utf-8') as filein:
            for line in filein:
                line_list = line.strip('\n').split('\t') # 因为我的txt文件是“\t”分割
                spamriter.writerow(line_list)

txt_to_csv(data_path,'data.csv')

#使用pandas读取csv格式数据
data=pd.read_csv('data.csv',header=None)
print(data)#结果如下图所示

在这里插入图片描述

3 将txt文档数据读入内存中

3.1 方式一:直接读取

txt文档如下所示
在这里插入图片描述
读取数据:

from io import open
filename =“F:\jupyter_text\data\namesChinese.txt"
# 从文件中读取语言对并以\n(换行符)划分存到列表lines中
lines = open(filename, encoding='utf-8').read().strip().split('\n')
print(lines[:5])#打印前5行数据,如下所示
['Ang', 'Au-Yong', 'Bai', 'Ban', 'Bao']

3.2 方式二:读取指定文件夹下的所有txt文件到内存中:

原始数据如下所示:
在这里插入图片描述
将指定路径下的所有文件都读取到内存中,并且提取这些文件的名字(除去后缀),

# 从io工具包导入open方法
from io import open
# 用于正则表达式
import re

# 构建的category_lines形如:{"English":["Lily", "Susan", "Kobe"], "Chinese":["Zhang San", "Xiao Ming"]}
category_lines = {}

# all_categories形如: ["English",...,"Chinese"]
all_categories = []

# 读取指定路径下的txt文件,使用glob,就可以在路径中使用正则表达式,比如下面的'*.txt'表示对所有的txt文件进行遍历
for filename in glob.glob(data_path + '*.txt'):
    # 获取每个文件的文件名, 就是对应的名字类别
    #os.path.basename(filename)的作用是获取路径中的文件名部分,比如filename='./data/china.txt',经过这个函数的处理就得到china.txt, os.path.splitext(os.path.basename(filename))的作用是将获得的文件名以"."的形式进行切割,比如china.txt经过切割后变成 (china,txt), [0]的作用是取元组中的第一个元素,然后赋值给category
    category = os.path.splitext(os.path.basename(filename))[0]
    # 将其逐一装到all_categories列表中
    all_categories.append(category)
    # 然后读取每个文件的内容,形成名字列表
    lines = readLines(filename)
    # 按照对应的类别,将名字列表写入到category_lines字典中
    category_lines[category] = lines


# 查看类别总数
n_categories = len(all_categories)
print("n_categories:", n_categories)
# 随便查看其中的一些内容
print(category_lines['Italian'][:5])

#结果如下所示:
n_categories: 18
['Abandonato', 'Abatangelo', 'Abatantuono', 'Abate', 'Abategiovanni']

4 将指定txt文档写入excell表格

txt数据如下:

图一:其中0,1,2既是文件夹名,又是标签名
在这里插入图片描述
图二:打开文件夹0,里边的文件如下所示:

在这里插入图片描述
图三:打开第一个文件,内容如下所示:
在这里插入图片描述
目的:将每个文件中的数据写到excell中的一行中,并且需要添加对应标签

from io import open
import glob


def findFiles(path): return glob.glob(path)

def readLines(filename):
    lines = open(filename, encoding='utf-8').read().strip().split('\n')
    return [line for line in lines]



categorty_lines = {}
all_categories = []
all_lines=[]
cout=0
for j in range(3):
    # j=str(j)

    for i, filename in enumerate(findFiles('D:\Desktop\mfcc/{}\*.txt'.format(j))):
        category = j

        lines = readLines(filename)
        lines.insert(0, category)#在每一行的第一个位置添加标签category
        categorty_lines[i+cout] = lines
    cout+=i


import csv
fpath = r'D:\Desktop\mfcc/csv\tt.csv'
f = open(fpath, 'w')
res_list = []
res_dic = {}
print(categorty_lines)
for key,value in categorty_lines.items():
    for i , v in enumerate(value):
        res_dic[str(i)]=v

    res_dic['num'] = key
    res_list.append(res_dic)
    res_dic={}
print(res_list)
l=['num']
l2=[str(i) for i in range(206)]#每一行中共有206列
fieldnames = l+l2
print(fieldnames[2])
csvw = csv.DictWriter(f,fieldnames=fieldnames,lineterminator='\n')
csvw.writeheader()
csvw.writerows(res_list)
f.close()

结果如下所示:
在这里插入图片描述

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值