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()
结果如下所示: