一 介绍

大家好小编是一个非常喜欢音乐的技术男,但是奈何最近QQ音乐会员VIP到期,最近奈何囊中羞涩,所以打算老老实实的用python写了一个爬取音乐的程序,只要是在QQ音乐
范围内的音乐都可以成功获取。由于最近小编时间有限所以具体爬取的过程接下来会给大家补充,我这里先写一些我所有到的主要问题。

二 Json模块dumps、loads、dump、load函数介绍

1、json.dumps()

(1)json.dumps()用于将dict类型的数据转成str

举例说明:
import json

dicts = {'a':'1111','b':'2222','c':'3333','d':'4444'} 

strs = json.dumps(dicts)    

print(dicts)
print(strs)

print(type(dicts))
print(type(strs))

输出:
{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}
{"a": "1111", "b": "2222", "c": "3333", "d": "4444"}
<class 'dict'>
<class 'str'>


注意:因为如果直接将dict类型的数据写入json文件中会发生如下错误:
import json  

dicts = {'a':'1111','b':'2222','c':'3333','d':'4444'} 

dictspath = ('PythonProject/Blog/save/saveJson.json')  

with open(dictspath, "w") as f:  
    f.write(dicts)  
    f.close() 

输出:
    Traceback (most recent call last):
File "PythonProject/Blog/Json.py", line 23, in <module>
    f.write(dicts)  
TypeError: write() argument must be str, not dict

2、json.loads()

json.loads() 用于将str类型的数据转成dict。

import json
dicts = {'a':'1111','b':'2222','c':'3333','d':'4444'} 
strs1 = json.dumps(dicts)    
strs2 = json.loads(strs1)

print(dicts)
print(strs1)
print(strs2)

print(type(dicts))
print(type(strs1))
print(type(strs2))


输出:
{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}
{"a": "1111", "b": "2222", "c": "3333", "d": "4444"}
{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}
<class 'dict'>
<class 'str'>
<class 'dict'>

3、json.dump()

json.dump()用于将dict类型的数据转成str,并写入到json文件中。

import json  

dicts = {'a':'1111','b':'2222','c':'3333','d':'4444'}  

dictpath = ('PythonProject/Blog/save/saveJson.json')  

# 方法 1
Json1 = json.dumps(dicts)    
with open(dictpath, "w") as f:  
    f.write(Json1)  
    f.close()  

# 方法 2   
json.dump(dicts, open(dictpath, "w"))

输出:在PythonProject/Blog/save/下生成saveJson.json文件

4、json.load()

json.load()用于从json文件中读取数据。

import json

dicts = 'PythonProject/Blog/save/saveJson.json'

jsons = json.load(open(dicts))   

print(jsons)
print(type(jsons))

for key in jsons.keys():
    print('key: %s   value: %s' % (key,jsons.get(key)))

输出:
{'a': '1111', 'b': '2222', 'c': '3333', 'd': '4444'}
<class 'dict'>
key: a   value: 1111
key: b   value: 2222
key: c   value: 3333
key: d   value: 4444

5、str.replace(old,new,max)

第一个参数是要进行更换的旧字符,第二个参数是新的子串,将取代旧的子串,第三个参数是替换多少次,默认是全部

6、compile(source, filename, mode[, flags[, dont_inherit]])

compile() 函数将一个字符串编译为字节代码。

compile(source, filename, mode[, flags[, dont_inherit]])
参数
* source -- 字符串或者AST(Abstract Syntax Trees)对象。。
* filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
* mode -- 指定编译代码的种类。可以指定为 exec, eval, single。
* flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。
* flags和dont_inherit是用来控制编译源码时的标志
评 论