python解析csv格式文件

文本文件内容如下:

name:wood
password:wood123456
sex:male
age:10

此时需要读取该数据,则可以直接使用open函数完成文本内容的读取操作;

但是读取的数据是个完整的字符串,如果需要通过键名调用对应的键值的话则需要做一系列的处理;其处理方式可以如下

#读取txt格式数据
dict1={}
with open("test.txt") as fp:
    #print(fp.readlines())  #注意read、readline、readlines三者的使用
    #就可以联想到字符串的操作;如果使用同一个对象时,调用readlines则表示将文件中的所有数据全部读完了,所以后面在调用文件对象中无值
    #print("".join(fp.readlines()))  #等价于read
    for value in fp.readlines():
        get_value=value.splitlines()
        get_dict=get_value[0].split(":")
        dict1[get_dict[0]]=get_dict[1]
print(dict1)

 

那么经过上述代码的处理则可以得到一个字典,最后可以通过键名取对应的键值;但是上述方式就过于麻烦,所以可以将一定格式的数据直接存储到数据格式文件中;例如:CSV格式文件;

CSV概念

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

特点

读取出的数据一般为字符类型,如果是数字需要人为转换为数字
以行为单位读取数据
列之间以半角逗号或制表符为分隔,一般为半角逗号
一般为每行开头不空格,第一行是属性列,数据列之间以间隔符为间隔无空格,行之间无空行。


读取csv文件
csv文件内容如下:

name,age,sex
f,11,女
saw,12,男
f1,111,女
saw1,122,男

# 1 读取csv文件
import csv

# csv格式文件实际就是文本类型;读取csv文件数据
# 如果文件中存在中文的话,则必须设定其编码格式,否则得到的结果可能是乱码
with open("stu.csv", encoding="utf-8") as fp:
    # print(fp.readlines())  #不使用文件流对象直接读取数据
    get_read_csv = csv.reader(fp, dialect="excel")  # excel-tab:整个一行使用一个字符串表示,整个字符串中如果存在tab键的之间使用逗号隔开
    print(next(get_read_csv))  # 返回的是get_read_csv是一个迭代器:__iter__  __next__
    print(next(get_read_csv))

# 2 获取某行的第几个值
import csv

# 要读csv格式文件的第3行第三个值;
count = 1
with open("stu.csv", encoding="utf-8") as fp:
    get_read_csv = csv.reader(fp, dialect="excel")  # excel-tab:整个一行使用一个字符串表示,整个字符串中如果存在tab键的之间使用逗号隔开
    for value in get_read_csv:
        if count == 3:
            print("第三行第三个值:", value[2])
        count += 1

# 3 将数据写入csv文件
import csv
with open("stu.csv", mode="a", newline="") as fp:  # open函数中存在一个参数newline,该参数如果针对csv格式操作时,写入一行数据会先执行换行操作
    writer_csv_objcet = csv.writer(fp)
    # writer_csv_objcet.writerow([100,200,300])   #writerow以一行的形式进行写入,传入的是一个可迭代对象
    writer_csv_objcet.writerow(("aaa", "bbb", "ccc"))

 

注意:如果使用wirerow一行一行写入数据时,一定要注意需要将open函数中的newline值设置为空,否则会写入一行空一行再写入

如果writerow中传入的是字典对象的话:

writer_csv_objcet.writerow({"name":"zhangans","age":10})
1.
上述代码实际写入到csv文件中的是对应字典的键名,不会将值写入(因为默认操作是字典的键名),如果需要传入对应的键值的话则可以使用下面代码:

writer_csv_objcet.writerow([value for value in {"name":"zhangans","age":10}.values()])
1.
如果需要同时写入多行的话则:

#写多行:可以通过writerows方法,传入的参数是一个二维可迭代对象
writer_csv_objcet.writerows([[1,2,3],[4,5,6]])
1.
2.
Reader方法详析
csv.reader(csvfile, dialect='excel', **fmtparams):

  该函数返回一个reader对象,该对象可以迭代csv文件中的每一行,csv文件可以是任意支持iteratior协议的对象。每次调用它的__next__()方法(文件对象和列表对象都适用的方法),该对象返回一个字符串。从csv文件读取的每一行,都以列表的形式返回。

  参数解释:

  csvfile:可以是任何支持迭代器协议的对象,它每次返回一个字符串。如果它是一个文件对象,它应该以newline=''的形式打开(参照样例).
  dialect:是一个可选参数,用来定义一个仅针对特定CSV dialect的参数集。它可能是一个Dialect类的子类实例或由list_dialects()返回的多个字符串中的一个。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值