爬虫入门【7】Python-文件的读写和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
')
>>>15
f=open('workfile.txt','a',encoding='utf-8')
f.write('
')
f.write('这是写入的第一行~
')
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

原文地址:https://www.cnblogs.com/xingzhui/p/7868478.html