zoukankan      html  css  js  c++  java
  • 计算机二级python 知识点篇(文件和数据格式化)

    计算机二级python 知识点篇(文件和数据格式化)

    考纲考点

    • 文件的使用: 文件打开、 关闭和读写
    • 数据组织的维度: 一维数据和二维数据
    • 一维数据的处理: 表示、 存储和处理
    • 二维数据的处理: 表示、 存储和处理
    • 采用CSV格式对一二维数据文件的读写

    知识点1

    文件包括两种类型: 文本文件二进制文件
    二进制文件和文本文件最主要的区别在于是否有统一的字符编码

    • 文本文件一般由单一特定编码的字符组成, 如UTF-8编码, 内容容易统一展示和阅读。
    • 二进制文件直接由比特0和比特1组成, 文件内部数据的组织格式与文件用途有关。 二进制是信息按照非字符但特定格式形成的文件, 例如, png格式的图片文件、 avi格式的视频文件
    f = open("a.txt","rt") #t表示文本文件方式
    print(f.readline())
    f.close()
    
    >>>
    全国计算机等级考试
    
    
    f = open(“a.txt”,“rb”) #b表示二进制文件方式
    print(f.readline())
    f.close()
    
    >>>
    b'xc8xabxb9xfaxbcxc6xcbxe3xbbxfaxb5xc8xbcxb6
    xbfxbcxcaxd4'
    
    

    采用文本方式读入文件, 文件经过编码形成字符串, 打印出有含义的字符;
    采用二进制方式打开文件, 文件被解析为字节流

    文件的打开与关闭

    Python通过open()函数打开一个文件, 并返回一个操作这个文件的变量, 语法形式如下:

    <变量名> = open(<文件路径及文件名>, <打开模式>)
    
    打开模式 含义
    'r' 只读模式, 如果文件不存在, 返回异常FileNotFoundError, 默认值
    'w' 覆盖写模式, 文件不存在则创建, 存在则完全覆盖源文件
    'x' 创建写模式, 文件不存在则创建, 存在则返回异常FileExistsError
    'a' 追加写模式, 文件不存在则创建, 存在则在原文件最后追加内容
    'b' 二进制文件模式
    't' 文本文件模式, 默认值
    '+' 与r/w/x/a一同使用, 在原功能基础上增加同时读写功能

    打开模式使用字符串方式表示, 根据字符串定义,单引号或者双引号均可。 上述打开模式中, 'r'、'w'、 'x'、 'b'可以和'b'、 't'、 '+'组合使用, 形成既表达读写又表达文件模式的方式。

    例 新建一个文本文件a.txt, 其内容为“全国计算机等级考试” , 保存在目录PATH中, 假设此时路径PATH是Windows系统的D盘根目录。 打开并关闭该文件的操作过程如下。

    >>>PATH = "D:\"
    >>>f = open(PATH + "a.txt", "rt")
    >>>print(f.readline())
    国家计算机等级考试
    >>>f.close()
    >>>print(f.readline())
    Traceback (most recent call last):
    File "<pyshell#81>", line 1, in <module>
    print(f.readline())
    ValueError: I/O operation on closed file.
    

    文件的读写

    根据打开方式不同, 文件读写也会根据文本文件或二进制打开方式有所不同。

    方法 含义
    f.read(size=-1) 从文件中读入整个文件内容。 参数可选, 如果给出, 读入前size长度的字符串或字节流
    f.readline(size = -1) 从文件中读入一行内容。 参数可选, 如果给出, 读入该行前size长度的字符串或字节流
    f.readlines(hint=-1) 从文件中读入所有行, 以每行为元素形成一个列表。 参数可选, 如果给出, 读入hint行
    f.seek(offset) 改变当前文件操作指针的位置, offset的值:0: 文件开头; 2: 文件结尾

    一次性读入内存 read() & readlines()

    • f.read()是最常用的一次性读入文件的函数, 其结果是一个字符串。
    • f.readlines()也是一次性读入文件的函数, 其结果是一个列表, 每个元素是文件的一行。
    >>>f = open("D://b.txt", "r")
    >>>s = f.read()
    >>>print(s)
    新年都未有芳华, 二月初惊见草芽。
    白雪却嫌春色晚, 故穿庭树作飞花。
    >>>f.close()
    
    
    >>>f = open("D://b.txt", "r")
    >>>ls = f.readlines()
    >>>print(ls)
    ['新年都未有芳华, 二月初惊见草芽。 
    ', '白雪却嫌春色晚, 故穿
    庭树作飞花。 
    ']
    >>>f.close()
    

    文件指针

    文件打开后, 对文件的读写有一个读取指针, 当从文件中读入内容后, 读取指针将向前进, 再次读取的内容将
    从指针的新位置开始。

    >>>f = open("D://b.txt", "r")
    >>>s = f.read()
    >>>print(s)
    新年都未有芳华, 二月初惊见草芽。
    白雪却嫌春色晚, 故穿庭树作飞花。
    >>>ls = f.readlines()
    >>>print(ls)
    []
    >>>f.close()
    

    结合读取指针理解, 上述代码中ls返回值为空,因为之前f.read()方法已经读取了文件全部内容,读取指针在文件末尾, 再次调用f.readlines()方法已经无法从当前读取指针读入内容, 因此返回结果为空。f.seek()方法能够移动读取指针的位置, f.seek(0)将读取指针移动到文件开头f.seek(2)将读取指针移动到文件结尾。

    >>>f = open("D://b.txt", "r")
    >>>s = f.read()
    >>>print(s)
    新年都未有芳华, 二月初惊见草芽。
    白雪却嫌春色晚, 故穿庭树作飞花。
    >>>f.seek(0) # 将读取指针重置到文件开头
    >>>ls = f.readlines()
    >>>print(ls)
    ['新年都未有芳华, 二月初惊见草芽。 
    ', '白雪却嫌春色晚, 故穿庭树作飞花。 
    ']
    >>>f.close()
    

    逐行读入

    文本文件可以看成是由组成的组合类型,因此, 可以使用遍历循环逐行遍历文件, 使用方法如下:

    f = open(<文件路径及名称>, "r")
    for line in f:
    # 处理一行数据
    f.close()
    
    f = open("D://b.txt", "r")
    for line in f:
    print(line)
    f.close()
    
    >>
    新年都未有芳华, 二月初惊见草芽。
    白雪却嫌春色晚, 故穿庭树作飞花。
    

    方法 含义
    f.write(s) 向文件写入一个字符串或字节流
    f.writelines(lines) 将一个元素为字符串的列表写入文件
    • f.write(s)向文件写入字符串s, 每次写入后, 将会记录一个写入指针。 该方法可以反复调用, 将在写入指针后分批写入内容, 直至文件被关闭。
    • 使用f.write(s)时, 要显式的使用' '对写入文本进行分行, 如果不进行分行, 每次写入的字符串会被连接起来。
    >>>f = open("D://c.txt", "w")
    >>>f.write('新年都未有芳华
    ')
    >>>f.write('二月初惊见草芽
    ')
    >>>f.write('白雪却嫌春色晚
    ')
    >>>f.write('故穿庭树作飞花
    ')
    >>>f.close()
    
    新年都未有芳华
    二月初惊见草芽
    白雪却嫌春色晚
    故穿庭树作飞花
    
    
    • f.writelines(lines)直接将列表类型的各元素连接起来写入文件f
    >>>ls = ['新年都未有芳华
    ', '二月初惊见草芽
    ','白雪却嫌春色晚
    ','故穿庭树作飞花
    ']
    >>>f = open("D://c.txt", "w")
    >>>f.writelines(ls)
    >>>f.close()
    
    

    数据组合的维度

    • 一维数据由对等关系的有序或无序数据构成, 采用线性方式组织, 对应于数学中数组的概念。
    • 二维数据, 也称表格数据, 由关联关系数据构成,采用二维表格方式组织, 对应于数学中的矩阵
    • 高维数据由键值对类型的数据构成, 采用对象方式组织, 可以多层嵌套

    一维数据的处理

    • 一维数据是最简单的数据组织类型, 由于是线性结构, 在Python语言中主要采用列表形式表示
    • 逗号分割的存储格式叫做CSV格式(Comma-SeparatedValues, 即逗号分隔值)
    • 一维数据保存成CSV格式后, 各元素采用逗号分隔, 形成一行。 从Python表示到数据存储, 需要将列表对象输出为CSV格式以及将CSV格式读入成列表对象
    1. 列表对象输出为CSV格式文件方法如下, 采用字符串的join()方法最为方便
    ls = ['北京', '上海', '天津', '重庆']
    f = open("city.csv", "w")
    f.write(",".join(ls)+ "
    ")
    f.close()
    
    北京,上海,天津,重庆
    
    1. 对一维数据进行处理首先需要从CSV格式文件读入一维数据, 并将其表示为列表对象
    f = open("city.csv", "r")
    ls = f.read().strip('
    ').split(",")
    f.close()
    print(ls)
    
    >>>
    ['北京', '上海', '天津', '重庆']
    

    二维数据的处理

    • 维数据由多条一维数据构成, 可以看成是一维数据的组合形式。 因此, 二维数据可以采用二维列表来表示, 即列表的每个元素对应二维数据的一行, 这个元素本身也是列表类型, 其内部各元素对应这行中的各列值
    ls = [
    ['指标', '2014年', '2015年', '2016年'],
    ['居民消费价格指数', '102', '101.4', '102'],
    ['食品', '103.1', '102.3', '104.6'],
    ['烟酒及用品', '994', '102.1', '101.5'],
    ['衣着', '102.4', '102.7', '101.4'],
    ['家庭设备用品', '101.2', '101', '100.5'],
    ['医疗保健和个人用品', '101.3', '102', '101.1'],
    ['交通和通信', '99.9', '98.3', '98.7'],
    ['娱乐教育文化', '101.9', '101.4', '101.6'],
    ['居住', '102', '100.7', '101.6'],
    ]
    
    • 二维列表对象输出为CSV格式文件方法如下, 采用遍历循环和字符串的join()方法相结合
    # ls代表二维列表, 此处省略
    f = open("cpi.csv", "w")
    for row in ls:
    f.write(",".join(row)+ "
    ")
    f.close()
    
    • 对二维数据进行处理首先需要从CSV格式文件读入二维数据, 并将其表示为二维列表对象。 借鉴一维数据读取方法, 从CSV文件读入数据的方法如下。
    f = open("cpi.csv", "r")
    ls = []
    for line in f:
    ls.append(line.strip('
    ').split(","))
    f.close()
    print(ls)
    
    >>>
    [['指标', '2014年', '2015年', '2016年'], ['居民消费价格指数', '102', '101.4', '102'], ['食品', '103.1', '102.3','104.6'], ['烟酒及用品', '994', '102.1', '101.5'], ['衣着', '102.4', '102.7', '101.4'], ['家庭设备用品', '101.2','101', '100.5'], ['医疗保健和个人用品', '101.3', '102','101.1'], ['交通和通信', '99.9', '98.3', '98.7'], ['娱乐教育文化', '101.9', '101.4', '101.6'], ['居住', '102','100.7', '101.6']]
    
    • 二维数据的处理

    二维列表一般需要借助循环遍历实现对每个数据的处理, 基本代码格式如下:

    for row in ls:
    for item in row:
    <对第row行第item列元素进行处理>
    
    # 此处略去从CSV获取数据到二维列表ls
    for row in ls:
    line = ""
    for item in row:
    line += "{:10}	".format(item)
    print(line)
    
  • 相关阅读:
    config https in nginx(free)
    js hex string to unicode string
    alter character set
    es6
    音乐播放器
    JS模块化-requireJS
    PHP中的封装和继承
    JavaScriptOOP
    mui框架移动开发初体验
    走进AngularJS
  • 原文地址:https://www.cnblogs.com/BlogOfEr/p/11433893.html
Copyright © 2011-2022 走看看