zoukankan      html  css  js  c++  java
  • 爬虫入门【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
    

  • 相关阅读:
    为CheckBoxList每个项目添加一张图片
    计算字符串中各个字符串出现的次数
    显示相同数字相乘的结果,直到数值大于150为止
    实例4 函数的引用调用
    嵌入式BootLoader技术内幕(二)
    实例2 关系和逻辑运算
    linux环境变量的系统设置
    嵌入式BootLoader技术内幕(三)
    supervivi的一点秘密
    Bootloader之vivi
  • 原文地址:https://www.cnblogs.com/xingzhui/p/7868478.html
Copyright © 2011-2022 走看看