python中的模块

一、json模块

json模块是python内置的库,在使用的时候直接导入就可以。
json模块的操作使用相对较为简单,该模块只有四个方法dump()、load()、dumps()、loads()

作用:
json模块的主要功能是将序列化数据从文件里读取出来或者存入文件。

其中dump()是将数据存入文件中;

load()是用于读取文件;

而dumps()和loads()是对python对象进行操作。

dumps()是将一个Python对象序列化为JSON格式的字符串。这个函数通常用于将字典或其他Python数据结构转换为JSON字符串,以便在网络传输或存储时使用。

loads()是将json字符串解码成python对象。

json.dumps和json.dump的区别:

dump()不需要使用.write()方法,只需要写那个字典,那个文件即可; 而 dumps()需要使用.write()方法写入
如果把字典写到文件里面的时候,dump()好用;但是如果不需要操作文件,或需要把内容存储到数据库和excel,则需要使用dumps()先把字典转换成字符串,再写入。

1、json.dumps()

将python数据类型转换为json格式的字符串

import json

person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}

jsonStr = json.dumps(person)
# 打开文件   在文件里写入转成的json串
with open('test.json', 'w', encoding='utf-8') as f:  
    f.write(jsonStr)  

2、json.dump()    

将python数据类型转换并保存到son格式文件内

 import json
 person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
 json.dump(person, open('data.json', 'w'), sort_keys=True, indent=4, separators=(',', ': '))
 

参数:

  • sort_keys: 是否排序 indent: 定义缩进距离
  • separators: 是一个元组,定义分隔符的类型
  • skipkeys:是否允许json字串编码字典对象时 字典的key不是字符串类型

3、json.loads()

将json格式的字符串转换为python的类型

import json

# Python字典
person = {"name": "小李", "sex": "男", "tel": ["8234588", "1244351"], "isonly": True}
print(person)
print(type(person))

# Python字典转换为json字符串
jsonStr = json.dumps(person)
print(jsonStr)
print(type(jsonStr))

# json字符串再转换为Python字典
python_obj = json.loads(jsonStr)
print(python_obj)
print(type(python_obj))

文件操作:

import json

f = open('data.json', encoding='utf-8')
content = f.read()  # 使用loads()方法需要先读文件   # content是str类型
python_obj = json.loads(content)
print(python_obj)


4、json.load()  从文件中读取数据并转换为python的类型

从json格式的文件中读取数据并转换为python的类型

import json

python_obj = json.load(open('data.json','r'))
print(python_obj)
print(type(python_obj))  # 字典

输出:

{'name': 'nose', 'age': 37}
<class 'dict'>

json.load和json.loads()的区别

  1. loads() 传的是json字符串,而 load() 传的是文件对象
  2. 使用 loads() 时需要先读取文件在使用,而load() 则不用

二、random库

random库包含两类函数,常用的共8个
–基本随机函数: seed(), random()
–扩展随机函数:randint(), getrandbits(), uniform(), randrange(), choice(), shuffle()

三、csv 模块

csv 模块实现了 CSV 格式的表格数据的读写。

CSV (Comma Separated Values),逗号分隔值 文件格式,其文件以纯文本的形式存储表格数据(数字和文本)。CSV 一般以换行符分隔每行数据,每行数据以逗号分隔多个字段值。

3.1、方法和类


1、读取csv文件

csv.reader(csvfile, dialect='excel', **fmtparams)

# 返回一个 CSV 文件的 reader 对象, <class '_csv.reader'>。
# csvfile 可以是任何可迭代对象, 只要迭代的元素为字符串 (一行 CSV 数据)。
# 每行数据以 由字段值组成的字符串列表 的形式迭代读取。

示例代码如下:

import csv

c1 = csv.reader(open("666.csv"))   
print(c1)   # c1存的是内存地址
print(type(c1))   # <class '_csv.reader'> csv文件的reader对象
for i in c1:  # 迭代读取所有行数据:csv文件的reader对象按照一行一行的去读取csv文件 
    print(i)  # csv文件的一行数据返回一个列表

注意:

一行字符串为一行数据(不考虑字段值中有’\n’),每行数据以 , 分隔。如果字段值中有 , 或 " 字符,则该字段值需要使用双引号 "value" 引起来,字段两边的双引号不会被解析为字段值的一部分,字段值中如果需要使用 " 字符,需要添加多一个 " 用于转义,即字段值中两个双引号 "" 解析时表示一个双引号 "。逗号分隔符两边空格默认会解析为字段值的一部分,空白行也会解析为一行(最后一行的’\n’不算)。

如demo.csv文件如下:

name,price,desc
Python,30.00,Python Book
Java,48.99,Java'Development
C,89,"Hello,World,""C"""
你好,,世界

上面文件解析成表格如下:


2、写入csv文件

csv.writer(csvfile, dialect='excel', **fmtparams)

# 返回一个 CSV 文件的 writer 对象 <class '_csv.writer'>。
# csvfile 可以是具有 write() 方法的任意对象。
# 每行数据通过 writerow() 方法以 由字段值组成的字符串列表 的形式写入。

示例代码如下:

import csv

with open("demo2.csv", "wt") as csvfile:
    writer = csv.writer(csvfile)
    
    writer.writerow(["name", "price", "desc"])
    writer.writerow(["Python", "88.99", "Hello Python"])
    
    # 写入包含特殊字符的字段值
    writer.writerow(["Java", "1234", " Java\nWorld 'AB',CD,EF\"XYZ\" "])
    
    rows = [
        ["Hello", None, "World"],   # None 将被解析为空字符串 ''
        ["你好", "1000", "世界"]
    ]
    writer.writerows(rows)          # 写入多行
 

demo2.csv 文件内容:

name,price,desc
Python,88.99,Hello Python
Java,1234," Java
World 'AB',CD,EF""XYZ"" "
Hello,,World
你好,1000,世界

3、以字典形式读写csv文件

class csv.DictReader(f, fieldnames=None, restkey=None, restval=None, dialect='excel', *args, **kwds)

# 创建一个 CSV 文件读取对象, f 为已用文本方式打开的可读 csv 文件。
#
# 该对象操作上与常规的 reader 类似,但将每一行数据都映射为一个 dict,
# 该 dict 的字段名由 fieldnames 字符串列表/序列 给出,
# 如果 fieldnames=None 则文件 f 的第一行中的值作为字段名。
#
# 如果某行中的 字段值 多于 fieldnames, 则剩余字段值被放入一个列表中, 并以 restKey 的值作为 key 保存到 dict。
# 如果某行中的 字段值 少于 fieldnames, 则剩余字段的值使用 restval 的值来填充。
#

class csv.DictWriter(f, fieldnames, restval='', extrasaction='raise', dialect='excel', *args, **kwds)


# 创建一个 CSV 文件写入对象, f 为已用文本方式打开的可写 csv 文件。
# 该对象操作上与常规的 writer 类似,但会将 dict 映射到输出行。
#
# fieldnames 为 字符串列表/序列, 用做表格的表头(第一行数据)。
#
# 每行数据通过 dict 的形式以 fieldnames 中的字段名顺序传递给 writerow() 方法写入。
#
# 如果传递给 writerow() 的 dict 缺少 fieldnames 中的键 (dict 中有数据缺失), 
# 则使用 restval 的值作为字段值。
#
# 如果传递给 writerow() dict 的某个键在 fieldnames 中找不到 (dict 中有多余数据), 
# 则根据 extrasaction 参数值决定要执行的操作, 
# 即 extrasaction='raise' 则抛出 ValueError, extrasaction='ignore' 则忽略。

# 注意: 与 DictReader 不同, DictWriter 中的 fieldnames 是必选参数。
#
 

示例代码如下:

import csv


with open("demo3.csv", "rt") as csvfile:
    reader = csv.reader(csvfile)
    for row in reader:
        print(row)


with open("demo2.csv", "wt") as csvfile:
    # 定义表头字段, 创建 CSV 文件写入对象
    fieldnames = ["name", "price", "desc"]
    writer = csv.DictWriter(csvfile, fieldnames)

    # 写入第一行表头数据(必须最先写入)
    # 根据创建 writer 时传入的 fieldnames 列表写入
    writer.writeheader()

    # 写一行(根据 fieldnames 中的字段名排序)
    writer.writerow(
        {
            "name": "Python",
            "price": "99.88",
            "desc": "Hello Python",
        }
    )

    # 写入多行(根据 fieldnames 中的字段名排序)
    rows = [
        {
            "name": "Java",
            "price": "98.68",
            "desc": "Hello Java",
        },
        {
            "name": "C",
            "price": "1000",
            "desc": "Hello C",
        }
    ]
    writer.writerows(rows)
 

demo3.csv 文件内容:

name,price,desc
Python,99.88,Hello Python
Java,98.68,Hello Java
C,1000,Hello C

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值