Python将.dat文件转换成.csv文件

在找数据的时候有时候会找到.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等,看有没有可以正常显示的

  • 20
    点赞
  • 87
    收藏
    觉得还不错? 一键收藏
  • 19
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值