Python将.dat文件转换成.csv文件
在找数据的时候有时候会找到.dat文件,我发现了两种方式。第一种很简单,是利用可以打开dat的软件进行转换,但是这种方式在只有一个数据的时候可以使用,数据集多时很不方便。另一种就是使用python代码,可以将某一目录下的所有文件.dat转换为csv【其实不止这两种,xls、csv、dat等之间转换都可以,看自己的需求】一、利用数据软件转换1.sublime+excel把下载的文...
在找数据的时候有时候会找到.dat文件,我发现了两种方式。
第一种很简单,是利用可以打开dat的软件进行转换,但是这种方式在只有一个数据的时候可以使用,数据集多时很不方便。
另一种就是使用python代码,可以将某一目录下的所有文件.dat转换为csv【其实不止这两种,xls、csv、dat等之间转换都可以,看自己的需求】
一、利用数据软件转换
1.sublime+excel
把下载的文件用sublime打开,删掉最上方的标题,另存为.txt文件,用excel打开,再次另存为.csv
2.SPSS
由于SPSS可以打开.dat文件,因此直接在spss中打开,再另存为
二、Python实现
原理:用Python实现的原理就是获取某一目录下的所有文件,分离成文件名和文件类型,当类型为dat的时候就创建一个同名的csv,把dat中的内容写进csv
import os
path_0 =r"D:\" #原文件目录
path_1 = r"D:\" #存放目录
filelist = os.listdir(path_0) #目录下文件列表
for files in filelist:
dir_path = os.path.join(path_0, files)
#分离文件名和文件类型
file_name = os.path.splitext(files)[0] #文件名
file_type = os.path.splitext(files)[1] #文件类型
#将.dat文件转为.csv文件
if file_type=='.dat': #可切换为.xls等
file_test = open(dir_path,'rb') #读取原文件
new_dir = os.path.join(path_1,str(file_name)+'.csv')
#print(new_dir)
file_test2 = open(new_dir,'wb') #创建/修改新文件
for lines in file_test.readlines():
lines=lines.decode()
str_data = ",".join(lines.split(' ')) #分隔符依据自己的文件确定
file_test2.write(str_data.encode("utf-8"))
file_test.close()
file_test2.close()
运行结束没有报错的话就会看到相应目录下多出了对应名字的csv文件
三、问题小结
1.报错'utf-8' codec can't decode byte 0xff in position 25: invalid start byte
看有很多小伙伴提到这个报错的问题,就去查了一下,直接贴解决方案,就是改一句话
把for循环中的这一行(代码行号21),
lines=lines.decode()
更改为
lines=lines.decode("utf8","ignore")
应该就能解决了
具体原因参考其他博主的博客https://blog.csdn.net/sinat_25449961/article/details/83150624
2.dat转csv后打开乱码
这个的代码解决方法没有找到。
1.有一种可能性是该dat文件是一种特殊文件,例如视频文件等,因此本身就是无法用csv正常显示的,打开后的乱码问题也无法解决。如果只是随便找的一个dat结尾的数据文件来进行转换,大概率是这个原因
2.尝试将utf-8替换为别的编码方式,例如gbk、gb2312等,看有没有可以正常显示的
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)