ad

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_3.1 文件与数据存储

网友投稿 99 2023-11-13

【摘要】 本书摘自《Python网络爬虫 从入门到精通》一书中第3章,第1节,吕云翔、张扬和韩延刚等编著。

第3章 文件与数据存储

Python 以简洁见长,在其他语言中比较复杂的文件读写和数据I0, 在 Python 中由于比 较简单的语法和丰富的类库而显得尤为方便。这一章将从最简单的文本文件读写出发,重点 介绍 CSV 文件读写和操作数据库,同时介绍一些其他形式的数据存储方式。

3.1 Python 中的文件

3.1.1 基本的文件读写

学习《Python网络爬虫 从入门到精通》_掌握爬虫的精髓_3.1 文件与数据存储

谈到 Python 中的文件读写,总会使人想到 “open” 关键字,其最基本的操作如下面的

示例:

#最朴素的 open()方法

f =open('filename.text','r')

#do something

f.close()

#使用 with, 在语句块结束时会自动 clos e

with open('t1.text','rt')as f:#“r” 代表read,“t” 代表text, 一般“t” 为默认,可省略

content =f.read()

with open('t1.txt','rt')as f:

for line in f:

with open('t2.txt','wt')as f:

f.write(content)# 写入

append_str ='append'

with open('t2.text','at')as f:

#在已有内容上追加写入,如果使用“w”, 已有内容会被清除

f.write(append_str)

#文件的读写操作默认使用系统编码, 一般为UTF-8

#使用 encoding 设置编码方式

with open('t2.txt','wt',encoding='ascii')as f:

f.write(content)

#编码错误总是很烦人的,如果觉得有必要暂时忽略,可以这样:

with open('t2.txt','wt',errors='ignore')as f:# 忽略错误的字符

f.write(content)# 写入

with open('t2.txt','wt',errors='replace')as f:# 替换错误的字符

f.write(content)# 写入

with open('redirect.txt','wt')as f:

print('your text',file=f)

#读写字节数据,如图片、音频

with open('filename.bin','rb')as f:

data =f.read()

with open('filename.bin','wb')as f:

f.write(b'HelloWorld')

#从字节数据中读写文本(字符串),需要使用编码和解码

with open('filename.bin','rb')as f:

text =f.read(20).decode('utf-8')

with open('filename.bin','wb')as f:

f.write('Hello World'.encode('utf-8'))

不难发现,在 open(的参数中,第一个是文件路径,第二个则是模式字符(串)。模式 字符(串)代表了不同的文件打开方式,比较常用的是 “r” (代表读), “w” (代表写), “a”(代表写,并追加内容)。 “w” 和 “a”常常被混淆,其区别在于:如果用“w” 模式打 开一个已存在的文件,会清空文件中的内容,重新写入新的内容;如果用 “a”, 则不会清空 原有数据,而是继续追加写入内容。对模式字符(串)的详细解释可如图3-1所示。

在一个文件(路径)被打开后,就生成了一个 file 对象(在其他一些语言中常被称为句 柄),这个对象也拥有自己的一些属性:

f =open('h1.html','r')

print(f.name)# 文件名:“h1.html”

print(f.closed)# 是否关闭:False

print(f.encoding)# 编码方式: US-ASCII

f.close()

print(f.closed)#True

当然,除了最简单的 read) 和write()方法,还有一些其他的文件操作方法

#t1.txt 的内容:

#

#line 5

with open('t1.txt','r')as f1:

#返回是否可读

print(f1.readable())#True

#返回是否可写

print(f1.writable())#False

#逐行读取

print(f1.readline())#line 1

print(f1.readline())#line 2:cat

#读取多行到列表中

print(f1.readlines())#['line 3:dog\n','\n','line 5']

#返回文件指针当前位置

print(f1.tell())#38

print(f1.read())# 指针在末尾,因此没有读取到内容

f1.seek(0)# 重设指针

#重新读取多行

print(f1.readlines())#['line 1\n','line 2:cat\n','line 3:dog\n','\n',

'line 5']

with open('t1.txt','a+')as f1:

f1.write('new line')

f1.writelines(['a','b','c'])# 根据列表写入

f1.f lush()# 立刻写入,实际上是清空 IO 缓存

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:打开《Python 编程与应用实践》_成为Python大佬_2.1 基本数据类型
下一篇:打开《Python 可视化数据分析》_学会挖掘大数据的价值_1.7 文件读取与写入功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×