美文网首页
April 29th_day12_file_operation

April 29th_day12_file_operation

作者: 3ae1c50960af | 来源:发表于2019-04-30 09:34 被阅读0次

    record

    1.函数作为变量

    实参高阶函数、返回值高阶函数
    列表.sort(), sorted(), max(), min()函数中key参数
    key要求:一个函数、有一个参数、有一个返回值

    2.迭代器和生成器

    迭代器:将其他序列转化成迭代器、生成器
    获取元素:next(),for-in

    # 迭代器
    iter1 = iter('hello')
    print(next(iter))
    print(iter.__next__())
    
    for x in iter1:
        print(x)
    

    生成器:调用带有yield关键字的函数,就可以得到一个生成器
    一个生成器能够产生多少数据,看函数执行完成会遇到多少次yield

    # 生成器
    def func1(num, pre=''):
        width = len(str(num))
        for x in range(1, num+1):
            yield pre.str(x).zfill(width)
    
    gen_id = func1(100)
    print(next(id_gen))
    print(next(id_gen))
    
    gen_id2 = func1(50,'python1902')
    print(next(id_gen2))
    
    # 每次都会创建新的生成器,获取第一个元素
    print('===:', next(func1(60)))
    print('===:', next(func1(60)))
    

    生成式

    生成式本质还是生成器,只是写法更简洁

    1.生成式的写法

    1.1.语法:

    (表达式 for 变量 in 序列)

    1.2.展开:

    def func():
    for 变量 in 序列:
    yield 表达式
    func()

    1.3.说明:

    () - 固定写法
    表达式 - 除了赋值语句以外的任何语句,比如:数据、变量、运算表达式、函数调用表达式等(这个表达式一般都和后面的变量有联系)

    gen1 = (x for x in range(5))
    print(gen1)
    print(next(gen1))
    print(next(gen1))
    print(next(gen1))
    print(next(gen1))
    print(next(gen1))
    # print(next(gen1))  # StopIteration
    
    dict1 = {'a': 1, 'b': 2, 'c': 3}
    gen2 = ((value, key)for key, value in dict1.items())
    
    print(next(gen2))
    print(dict(gen2))
    """
    (1, 'a')
    {2: 'b', 3: 'c'}
    """
    

    练习:实现自己的dict函数,可以将序列转换成字典

    2.第二种写法

    2.1语法

    (表达式 for 变量 in 序列 if 条件语句)

    2.2.展开

    def func():
    for 变量 in 序列:
    if 条件语句:
    yield 表达式

    gen = func()

    3.补充:python的三目运算符

    C语言 - 条件语句?值1:值2 (如果条件语句为真整个表达式的结果为值1,否则是值2)
    python语言 - 值1 if 条件语句 else 值2 (如果条件语句为真整个表达式的结果为值1,否则是值2)

    x = 3
    a = 1 if x == 2 else 2
    print(a)
    

    file

    1.数据持久化

    程序中产生的数据默认是保存在内存中,程序结束数据会自动销毁。如果希望程序结束数据不销毁,那么需要对这个数据做数据持久化
    数据持久化:将数据保存到文件中,然后将文件保存在磁盘/硬盘中

    2.文件操作(对文件内容进行操作)

    基本步骤:打开文件 -> 操作文件(读/改) -> 关闭文件(xx.close)

    2.1.打开文件

    open(file, mode='r', encoding=None) - 以指定的方式打开文件,并且返回文件对象
    说明:
    file - 字符传,文件路径,可以写绝对路径也可以写相对路径
    绝对路径(一般不用) - 完整路径,例如:/Users/yanhan/Documents/python/April_qianfeng_study/April_28th_day11/python\ program/text.json
    相对路径(需要先将文件保存在工程目录下)
    ./ - 代表当前目录
    ../ - 代表当前目录的上册目录
    .../ - 代表当前目录的上册目录的上册目录
    以此类推

    open('./test.txt') # ./可以省略,等于open('test.txt')
    open('./files/test2.txt')
    open('../files/text2.txt')
    

    mode - 字符串,文件的打开方式(决定打开文件后能够进行的操作,和操作方式)
    'r' - 以只读的方式打开文件,读出来的数据是字符串
    'w' - 以只写的方式打开文件,写入的数据是字符串
    'rb'/'br' - 以只读的方式打开文件,读出来的数据是二进制数据
    'wb'/'bw' - 以只写的方式打开文件,写入的数据是二进制数据
    'a' - 以只写的方式打开文件,写入的数据是字符串

    注意:如果是以读的方式打开文件,文件不存在会报错(FileNotFoundError)
    如果以写的方式打开文件,文件不存在不会报错,并且会自动创建这个文件

    encoding - 文本编码方式
    'utf-8'(mac,linux默认) - 支持中文
    'gbk'(windows默认) - 只支持英文
    注意:只有文本文件才能设置encoding,二进制操作不能设置encoding

    # f保存文件对象,只有打开文件才能得到文件对象
    f = open('text.txt', 'w', encoding='utf-8')
    

    2.2.操作文件

    2.2.1.读操作

    文件对象.read() - 返回文件中的内容

    f = open('text.txt', 'w', encoding='utf-8')
    f.write('累猴呀\n嘎嘎嘎')
    f.close()
    
    f2 = open('text.txt', 'r')
    content = f2.read()  # 读所有
    print(content)
    
    f2.seek(0)  # 设置读写位置
    print('====', f2.read())
    
    f2.seek(0)
    print('=====:', f2.readline().rstrip(), end='')
    print('=====:', f2.readline())
    """
    累猴呀
    嘎嘎嘎
    ==== 累猴呀
    嘎嘎嘎
    =====: 累猴呀=====: 嘎嘎嘎
    """
    

    读不到内容的时候返回空串

    2.2.2.写操作

    文件对象.write(内容) - 将内容写入指定文件中

    3.字节类型(bytes)

    3.1.数据来源:

    3.1.1.将其他数据类型转换成bytes类型:

    整型和字符串都可以转换成bytes

    bytes(10)
    bytes(10.2)  # 浮点型不能转换
    bytes(True)
    bytes('abc', encoding='utf-8')  # 字符串转化需要设置encoding
    bytes('你好!'.encode())  # 字符串转换二进制方法
    
    f3 = open('test.txt', 'wb')
    f3.write('abc'.encode())
    

    3.1.2.将bytes转字符串

    b1 = '你好!'.encode()
    
    str1 = str(b1, encoding='utf-8')
    print('str1:', str1)
    str2 = b1.decode(encoding='utf-8')
    print('str2:', str1)
    

    3.1.3.以'rb'/'br'的方式读文件(获取二进制)

    3.二进制文件的读写

    图片、视频、音频等都是二进制文件。这些文件只能以带'b'的方式打开然后操作

    # 二进制读操作
    image_f = open('file/luffy.jpeg', 'rb')
    image_data = image_f.read()
    print(type(image_date), image_data)
    
    # 二进制写操作
    n_f = open('new.jpeg', 'wb')
    n_f.write(image_data)
    
    # 下载网络图片
    response = requests.get('https://ss0.baidu.com/6ONWsjip0QIZ8tyhnq/it/u=3611364264,2238752415&fm=58')
    n_f2 = open('new2.jpeg', 'wb')
    n_f2.write(response.content)
    

    file2

    1.打开文件

    with open() as 文件对象:
    文件的操作
    (出了缩进就自动关闭文件)

    2.数据持久化

    练习:统计程序启动次数(将当前程序的启动次数打印出来)

    json

    1.什么是json数据

    满足json格式要求的数据就是json数据;文件内容满足json格式要求,就是json文件

    1.1.json格式要求

    a.一个json中有且只有一个数据;
    b.这个必须是json支持的数据类型的数据。

    1.2.json支持的数据类型

    数字类型(number) - 所有的数字(整数和小数),支持科学计数法
    例如:10, -100, 12.32, 3e2
    字符串(string) - 使用双引号引起来的字符集,支持转义字符
    例如:"abc", "12山东黄金", "123\nabc", "\u4e00"
    布尔值(boolean) - 只有true,false两个值
    数组(array) - 相当于python中的列表,[12, "asd", true, [1, 123]]
    字典(dictionary) - 相当于python中的字典,key必须为字符串
    例如:{"name": "张三", "age": 23}
    null - 相当于None,空值

    2.python数据和json数据的相互转换

    python中内置了一个json模块,用来支持json相关操作

    2.1.json转python

    json (转) python
    数字 int/float
    字符串 str, 有可能将双引号变成单引号
    布尔 true,false->True,False
    数组 list
    字典 dict
    null None

    2.2.json.loads()

    json.loads(字符串,encoding=编码方式) - 将json字符串转换成python对应的数据
    注意:这的字符串要求字符串中的内容必须是json格式的数据(去掉字符串最外面的引号,本身就是一个json数据)

    2.3.python转json

    python (转) json
    int/float 数字
    bool 布尔,大写变小写
    str 字符串,单引号变双引号
    list/tuple 数组
    dict 字典
    None null

    2.4.json.dumps()

    json.dumps(数据) - 将python数据转换成json格式的字符串

    相关文章

      网友评论

          本文标题:April 29th_day12_file_operation

          本文链接:https://www.haomeiwen.com/subject/macmnqtx.html