我是靠谱客的博主 老迟到帅哥,这篇文章主要介绍Python爬虫学习笔记_DAY_10_Python文件相关操作详细介绍【Python爬虫】,现在分享给大家,希望可以做个参考。

p.s.高产量博主,点个关注????不迷路!

目录

I.文件的创建和写入

II.文件的读出

III.文件的序列化与反序列化


I.文件的创建和写入

python中,一个文件可以被创建和写入,它的示例代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# python文件操作 # # 创建/打开一个文件:test.txt # 格式为:open(文件的路径;文件的模式) # 模式有:w 可写 r 可读 a 追加 fp = open('demo/test.txt','w') # 文件的关闭 # 执行打开、读写操作后要及时关闭文件,释放内存! fp.close() # 文件的读写 # 向文件内写入内容: # 格式为 文件对象.write('内容') fp_w = open('demo/test1.txt', 'w') fp_w.write('hello,worldn' * 5) fp_w.close() # 在w 写入模式下,每一次打开后,写入的位置都是开头,也即会覆盖之前的内容 # 在a 追加模式下,每一次会紧接着上一次写入的内容,不会覆盖: fp_a = open('demo/test2.txt', 'a') fp_a.write('hellon' * 5) fp_a.close()

需要注意的是,当文件在路径下不存在的时候,运行'w'写入模式时会自动创建文件并定为写入模式;'a'追加模式下,我们才可以每一次接着前一次的结尾写入,否则'w'模式下每一次都会覆盖前一次写入的内容


II.文件的读出

文件的读操作有很多不同的类型,它的示例代码如下:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 读取文件的内容 # read函数是按每字节读取,效率较低 fp_r = open('demo/test2.txt', 'r') content = fp_r.read() print(content) fp_r.close() # readline函数是一行一行的读取,但是调用一次只能读取一行: fp_l = open('demo/test2.txt','r') line = fp_l.readline() print(line) fp_l.close() # readlines函数也是按照行来读取,并且可以一次性把所有行都读取到, # 并返回一个列表的形式: fp_ls = open('demo/test2.txt','r') lines = fp_ls.readlines() print(lines) fp_ls.close()

需要注意的是,当文件不存在时,运行'r'读出模式是不会新建文件的,反而会抛出异常,因此要注意先新建好文件再读出。


III.文件的序列化与反序列化

最后介绍一下序列化和反序列化,先介绍一下序列化和反序列化的定义:

序列化:将列表、元组、字典等对象转成有序的字符串类型数据。

反序列化:将字符串类型数据转回列表、元组、字典等对象

下面是具体操作的示例代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 文件的序列化和反序列化 # 默认情况下,只能直接将字符串写入文件,列表、元组、字典等对象无法写入文件: fp = open('demo/test3.txt','w') fp.write('hello world') fp.close() name_list = ['张三','李四'] fp_1 = open('demo/test4.txt','w') # fp_1.write(name_list) 这句话就会报错,因为无法直接向文件写入列表对象, # 只能先进行序列化,而后写入 fp_1.close() # 序列化:对象 - - - > 字节序列(json字符串) # 序列化有两种方式: # (1) dumps() 函数 法 # 首先创建一个文件,并定义一个列表: fp_2 = open('demo/test5.txt','w') name_list = ['zhangsan','lisi'] # 导入json模块到python文件: import json # 进行序列化:使用json库的dumps()函数进行对象序列化: names = json.dumps(name_list) fp_2.write(names) fp_2.close() # (2) dump() 函数 法 # 它与dumps()的区别在于 # dump()函数在完成序列化的同时,会指定目标文件,并完成写入操作 # 类似于一步完成dumps()的两个操作: fp_3 = open('demo/test6.txt','w') # 这里可以看出,传入的参数多了一个文件对象,也即这就是指定的目标文件,序列化的内容会直接写进去: json.dump(name_list,fp_3) fp_3.close() fp_4 = open('demo/test6.txt','r') # 此时执行读取,它的结果是一个字符串类型: content = fp_4.read() print(type(content)) print(content) fp_4.close() # 但是我们的目的是要读出一个列表/元组/字典对象,因此需要做反序列化: # 反序列化:字节序列 (json字符串)- - - > 对象 # 反序列化也有两种方法: # (1) loads() 函数 法 fp_5 = open('demo/test6.txt','r') content = fp_5.read() # 调用json库中的loads()函数,传入被序列化的字符串变量,返回反序列化的json字符串: import json content = json.loads(content) print(type(content)) print(content) fp_5.close() # (2) load()函数 法: # 此法与dumps和dump的区别一样,也是实现了两步合成一步 # 即读取字符串与字符串转json对象(列表、元组、字典)合并在一步: fp_6 = open('demo/test6.txt','r') # 调用json库中的load()函数,同时完成读取+转换json对象: result = json.load(fp_6) print(result) print(type(result)) fp_6.close()

之所以要做序列化和反序列化,在代码中有解释,这里再重复一下,原因在于文件的写入操作不支持字典、元组、列表等对象的写入操作,因而需要先序列化后写入文件,而后读出时执行反序列化操作。????????????

最后

以上就是老迟到帅哥最近收集整理的关于Python爬虫学习笔记_DAY_10_Python文件相关操作详细介绍【Python爬虫】的全部内容,更多相关Python爬虫学习笔记_DAY_10_Python文件相关操作详细介绍【Python爬虫】内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部