python中的csv包

写这篇短博客的主要目的在于记录一下csv包中的几个字段的使用,用于pandas的read_csv函数应该是内部调用csv包,之前处理流量数据的时候有几个脏数据影响了整个文件的读取,后来发现是csv配置常量的设置问题。

主要的问题出在几个用于设置读取和写出格式的问题的配置。下面列在下面:

  • delimiter:用作分隔符的单个,默认为英文逗号
  • quotechar:可以被设置为任一单个字符,当字段中出现特殊字符(delimiter,quotechar,换行符)时,用该字符包裹该字段,默认为英文双引号。
  • doublequote:当字段内容中有quotechar的时候,不但该字段需要用quotechar包裹,内部的quotechar还要进行转义,doublequote就是默认开启的转义方法,即将内容中的quoechar给double一下子。默认为True
  • escapechar:当然,除了上面提到的doublequote的转义方法,可能有的人还是习惯于前缀转义符的方法,那么这个就是了。可以被设置为单个字符。读取的时候escapechar后面紧跟着的字符会被直接取消特殊含义。其优先级低于doublequote,如果想使用它,首先要将doublequote设置为False,而且当使用escapechar时,如果字段内有quotechar,整个字段不会被quotechar包裹,而是仅仅进行一下前缀转义。当quoting设置为QUOTE_NONE且doublequote设置为false时,写出会报错。
  • lineterminator:换行符,默认为”\r\n”,注意的是当前版本的自定义换行符只支持在写出的时候有用。
  • quoting:quote方式,有QUOTE_NONE, QUOTE_MINIMAL, QUOTE_ALL和QUOTE_NONNUMERIC四种,默认为QUOTE_MINIMAL。具体意义就是在何时使用quoting,分别是:不使用、对有特殊符号的字段使用、对全部字段使用、对非数字字段使用。
  • skipinitialspace:只在读入的时候有用,用于跳过分隔符后面的空格,默认为False。
  • strict:没用到过。

但是如果每次使用的使用都要设置这么多信息的话太过繁琐,因此csv包提供Dialect包提供配置信息的统一设置。我在这里把Dialect译为风格吧。系统预设几种风格分别是:unix/excel/excel-tab。

  • register_dialect:注册自定义风格名称与具体信息。
  • unregister_dialect:取消注册
  • get_dialect
  • list_dialects
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
csv.register_dialect("mydialect", delimiter=",", doublequote=False, skipinitialspace=True, quoting=csv.QUOTE_MINIMAL, quotechar="\"", lineterminator="\n", escapechar="\\")

l = [['asd','zxc','hello,world'],['he say:"i love you"', 'apple', 'pear'],['1','2','quote char is "']]

with open("temp.csv", 'w') as csvfile:
csvwriter = csv.writer(csvfile, dialect="mydialect")
for line in l:
<!-- more -->
csvwriter.writerow(line)

with open("temp.csv", 'r') as csvfile:
reader = csv.reader(csvfile, dialect="mydialect")
result = []
for row in reader:
result.append(row)
本站总访问量