第一part:CSV文件格式介绍


1) CSV的含义:

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列.

2)CSV的特点:
(1)读取出的数据一般为字符类型,如果是数字需要手动转换为数字;
(2)以行为单位读取数据;
(3)列之间以半角逗号或制表符为分隔,一般为半角逗号;
(4)一般为每行开头不空格,第一行是属性列,数据列之间以间隔符为间隔无空格,行之间无空行。

3)CSV的文件内容结构:

csv文件解析并插入数据库 java csv解析格式_数据

 

 

 


第二part:读取csv格式数据--reader


 操作.csv文件可以直接使用python的内置模块:csv,读数据的代码如下:

#导包
import csv
#csv格式文件实际就是文本类型;读取csv文件数据
#如果文件中存在中文的话,则必须设定其编码格式,否则得到的结果可能是乱码
with open("data1.csv", encoding="utf-8") as fp:
    get_read_csv=csv.reader(fp,dialect="excel")
    # 返回的是get_read_csv是一个迭代器:__iter__  __next__
    print("表头的值为:",next(get_read_csv))
    #遍历表内容,输出每行的值,类型为list,可以根据需求输出需要的类型
    for value in  get_read_csv:
       print("表内容为",value)

执行结果,如下:

 

 从上面代码可发现,读取csv格式的数据,使用的是csv.reader()方法

csv.reader(csvfile, dialect='excel',delimiter='\t'**fmtparams):

该函数返回一个reader对象,该对象可以迭代csv文件中的每一行,csv文件可以是任意支持iteratior协议的对象。每次调用它的__next__()方法(文件对象和列表对象都适用的方法),该对象返回一个字符串。从csv文件读取的每一行,都以列表的形式返回。
参数解释:
csvfile:可以是任何支持迭代器协议的对象,它每次返回一个字符串。如果它是一个文件对象,它应该以newline=''的形式打开(参照样例).
dialect:是一个可选参数,用来定义一个仅针对特定CSV dialect的参数集。它可能是一个Dialect类的子类实例或由list_dialects()返回的多个字符串中的一个。

delimiter:是一个可选参数,delimiter='\t'表示去掉分隔符'\t'

  

第三part:写数据到csv文件中


import csv
#csv文件中进行写入数据
with  open("data1.csv",mode="a") as fp:
      #创建写入对象
      writer_csv=csv.writer(fp)
     #writerow以一行的形式进行写入,传入的是一个可迭代对象
      #传入的值类型为元组
      writer_csv.writerow(("a","b","c"))
      # 传入的值类型为列表
      writer_csv.writerow([1,2,3,4,5,6])
      #传入的是值类型为字典
      writer_csv.writerow({"name": "zhangans", "age": 10})
      # 上述代码实际写入到csv文件中的是对应字典的键名,不会将值写入(因为默认操作是字典的键名),如果需要传入对应的键值的话则可以使用下面代码:
      writer_csv.writerow([value for value in {"name": "zhangsan", "age": 10}.values()])
      # 写多行:可以通过writerows方法,传入的参数是一个二维可迭代对象
      writer_csv.writerows([[1,2,3],[4,5,6]])

  执行结果,如下:

csv文件解析并插入数据库 java csv解析格式_数据_02