最近在看python的数据处理,刚看到文件格式的处理,是关于csv文件的,个人觉得很实用所以做下笔记以供复习
CSV文件的形式有很多。秩序定义csv.Dialect的一个子类即可定义出新的格式(如专门的分隔符、字符串引用约定、行结束符等)
由于我们的数据文本在保存时里面的格式大多数都是一致的,但是难免有的数据需求不一致。这时自定义处理格式就显得很有必要了。使用csv的Dilacate可以解决这个问题。
我对dialect的理解是:csv文件中的格式有很多:逗号分隔 冒号分隔等等。自己设置一个dialect类,规定格式来读取或写入。
我用了以下两种方式来处理,其实原理一样,只是看自己的习惯:(以下只是简单的测试练习)
1:新建一个 test.mycsv ,里边假设存放着,daihui@nihao@a #这里的后缀名可以是csv或txt
2:定义class:
class Mycsv(csv.excel):
delimiter = "@"
3:新建并注册一个csv dialect:
csv.register_dialect('mycsv',Mycsv) #参数(‘自定义名’,上面的类名)
4:编写要添加的内容列表:
mylist = ['daihui',10086,21] #这里随便做的测试,可以改为更复杂的格式
5:写文件和读文件:
kk = csv.writer(open('test.mycsv','a'),Mycsv)
kk.writerow(mylist) #在文件中写如mylist内容,使用Mycsv定义的格式
jj = csv.reader(open('test.mycsv'),Mycsv)
for a,b,c in jj: #以自定义的格式读取文本,按照这种格式打印出来
print(a,b,c)
1:创建一个文本保存数据,文本格式定义:
2 : 编写dialect:
csv.register_dialect('mycsv',delimiter='|') #直接注册。这里面可以设置很多参数,各种自定义格式
3 : 以mycsv格式打印:
with open('test.csv') as f:
lines = csv.reader(f,'mycsv') #对于writer()函数一样的使用
for line in lines:
print(line)
4:以'|'为分隔符显示
其实第二种就是把class里面的设置放到了注册里面但是当你设置多了的时候最好使用第一种,清晰可见。以上便是我的两种格式(以上只是简单的测试练习),只要学会了方法,就可以做更复杂的格式处理了
以下是dialect的更多参数:
delimiter 用于分隔字段的单字符字符串。默认为“,”
lineterminator 用于写操作的行结束符,默认为“\r\n”。读操作将忽略此选项,它能认出跨平台的行结束符
quotechar 用于带有特殊字符(如分隔符)的字段的引用符号。默认为“"”
quoting 引用约定。可选项包括csv.QUOTE_ALL(引用所有字段)......
skipinitialspace 忽略分隔符后面的空白符。默认为False
doublequote 如何处理字段内的引用符号。如果为True,则双写。完整信息及行为请参见在线文档
escapechar 用于对分隔符进行转义的字符串(如果quoting被设置为csv.QUOTE_NONE的话)。默认禁用