爬虫python怎么读_爬虫入门【7】Python-文件的读写和JSON

本文介绍了Python中文件的基本操作方法,包括不同模式下的读写操作,并详细解释了read、write等方法的用法。此外,还讲解了JSON数据的编码与解码方法,以及如何通过json模块处理JSON文件。

文本文档的读写

最重要的open()方法将返回一个file对象,经常使用的两个参数为open(filename,mode)

其中,filename为file保存的地址,可以是本地地址,相对地址或者绝对地址。

mode对象为对file对象进行的操作

'''对这个方法进行一些解释

open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)

file就是要操作的文件的地址,这个文件如果不存在,会创建;如果存在会打开;

mode参数:

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。

r+

打开一个文件用于读写。文件指针将会放在文件的开头。

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

ab+

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

encoding参数用于控制对文件的解码或者编码

'''

接下来,对这个file对象来解释一下概念和方法,首先是读取的方法:

read()方法

会将所有内容一次性打印出来

read(size)方法,可以限定读取内容的大小,size是字符的数量吧,大约是这样

举个例子,假如当前路径下面有个workfile.txt,文件,里面的内容是这样的:

/Hello World!

1+2=?

明天天气如何?/

f=open('workfile.txt','r',encoding='utf-8')

print(f.read())

f.close()#一定要记得将文件流关闭

Hello World!

1+2=?

明天天气如何?

如果read没有传入任何参数,那么会将文件中所有的内容都会被打印出来。

比较适合文件很小的情况。那么如果文件很大,怎么办呢?

read(size)方法适合这种情况:

f=open('workfile.txt','r',encoding='utf-8')

print(f.read(10))

f.close()#一定要记得将文件流关闭

Hello Worl

你看,打印出了10个字符~~

readline()方法

该方法会读取file中的一行,如果没有读取到最后,还可以继续使用readline方法获取下一行。

f=open('workfile.txt','r',encoding='utf-8')

print(f.readline())#打印出第一行

print(f.readline())#打印出第二行,由于我们第二行是空行,所以没有内容显示出来。

print(f.readline())#好了,第三行出来了。

#f.close()

Hello World!

可以看出,如果使用readline()方法,将不断的打印。

readlines()方法

从文件流中读取并且返回一个行的list。

此时,我们也学习一个比较方便的打开文件的方法,不用再惦记f.close()啦。

那就是with as语句,举个栗子~

with open('workfile.txt','r',encoding='utf-8') as file:

for line in file.readlines():

print(line.strip())

Hello World!

1+2=?

明天天气如何?

Write()方法

f.write(string)将字符串格式的内容写到文件中,返回写入的字符数。

如果是其他格式的内容,使用str()方法转换之后再传入。

还有writelines()方法。

>>> f.write('This is a test\n')

>>>15

f=open('workfile.txt','a',encoding='utf-8')

f.write('\n')

f.write('这是写入的第一行~\n')

f.close()

Hello World!

1+2=?

明天天气如何?

这是写入的第一行~

f.tell()方法

f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。

f.seek()方法

如果要改变文件当前的位置, 可以使用 f.seek(offset, from_what) 函数。

from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:

seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符

seek(x,1) : 表示从当前位置往后移动x个字符

seek(-x,2):表示从文件的结尾往前移动x个字符

from_what 值为默认为0,即文件开头。

JSON文件的读写

JSON是一种轻量级的数据交换格式。

Python中包含了json模块来对JSON进行编解码。

主要应用的两个函数为:

json.dumps(): 对数据进行编码。

json.loads(): 对数据进行解码。

在json的编解码过程中,python的原始类型会与json类型进行相互转换。

如果你要处理的是文件而不是字符串,你可以使用 json.dump() 和 json.load() 来编码和解码JSON数据。

Python和JSON类型转换对应:

JSON----------Python

object--------dict

array---------list

string---------str

number(int)----int

number(real)---float

true-----------True

false----------False

null-----------None

下面我们展示几个栗子:

import json

data={

'admin':'admin',

'url':'http://www.baidu.com',

'password':'somepassword'

}

json_str=json.dumps(data)

print('Python原始数据',repr(data))

print('JSON格式',json_str)

Python原始数据 {'admin': 'admin', 'url': 'http://www.baidu.com', 'password': 'somepassword'}

JSON格式 {"admin": "admin", "url": "http://www.baidu.com", "password": "somepassword"}

输出结果很相似。

如果要想这个data写入文件的话,是这样的代码:

import json

data={

'admin':'admin',

'url':'http://www.baidu.com',

'password':'somepassword'

}

with open('data.json','w') as f:

json.dump(data,f)

#当前路径下会出现data.json文件,里面的内容和上面的类似。

我们在展示一下如何从文件中读取json:

import json

with open('data.json','r') as f:

data=json.load(f)

print(data)

print("data['url']:",data['url'])#可以看出,读取的json文件可以看成一个字典操作。

#输出结果如下:

{'url': 'http://www.baidu.com', 'admin': 'admin', 'password': 'somepassword'}

data['url']: http://www.baidu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值