@ pandas 文本数据的读取与存储
文本数据的读取与存储
一. 作业要求
二. 题目分析
- 文件路径(文件目录)的读取,需要依靠os模块,os.work(),并将读取到的所有路径放在一个列表中;
- 文本内容的读入,用pandas的 pd.read_table() 读取文本文件内容,并且将其转换成列表形式,从而可以得到data以及line;
- 路径名称可以通过字符串的相关操作file_path.split("\"), string.strip() 得到 type, target, index;
- 最后将上述数据整合到一个test_dict里面,对其使用pd.Datafram(test_dict),即可得到所要的结果。
- 主函数中输入一个路径就可以得到结果。
三. 代码展示
import os
import pandas as pd
def file_name(file_path):
"""
使用os.walk()
root 获取所在目录,
dirs 获取所在目录的所有目录名,
files 获取所在目录的所有非目录文件名
"""
tmp_list = []
for root,dirs,files in os.walk(file_path):
tmp_list.extend([root + '\\' + i for i in files if 'txt' in i ]) #将所有目录下的文件名即路径保存在一个列表里
return tmp_list
def Data_List(file_path):
"""
用pandas读入文本文件数据
获取pd.Dataframe所需要的字典的数据
返回列表为[line,data,type,target,index]
"""
data= []
f=open(file_path,'r')
df=pd.read_table(f)
data_list = list(df)
# 通过file_path也就是路径,用字符串相关操作获取所需的line,type,target,index
Type, filename = file_path.split('\\')[-2:]
target, index = filename.split('.')[0].split('_')
# 遍历所获取的data按照要求存到data_list里
for d in data_list:
num = [int(j) for j in list(d.strip())]
data.extend(num)
line = len(data)
return line, data, Type, target, index
def main():
"""
主函数,利用pd.DataFrame()将数据整理成题设的格式
"""
test_dict = {
'line':[],
'data':[],
'type':[],
'target':[],
'index':[]
}
path = input("please input file_path:") #此处输入一个路径
name_list = file_name(path)
for path in name_list:
list2 = Data_List(path)
test_dict['line'].append(list2[0])
test_dict['data'].append(list2[1])
test_dict['type'].append(list2[2])
test_dict['target'].append(list2[3])
test_dict['index'].append(list2[4])
test_dict_df = pd.DataFrame(test_dict)
pd.set_option('display.width',5000)
print(test_dict_df)
if __name__ == "__main__":
main()
四. 结果展示
五. 遇到的问题
- 获取目录名称时没有达到遍历整个文件夹,只有一个文件夹,后来通过单行函数遍历成功;
[root + '\\' + i for i in files if 'txt' in i ]
- 读入文件时通过路径读取文件一直报错说没有该文件,最后发现实没有转义符 “r”;
- 返回值一直是空的,最后发现是因为没有调用前面的file_name() 函数;
- pd.Datafram()打印结果时换行了,最后加入了一行代码使其不换行
pd.set_option('display.width',5000)
- 暂时没有用类封装
- 想问老师用pandas.read_table()读文件和直接用f.read()有什么区别嘛?