• Python二级考试-综合应用题(csv文件读取与操作示例)


    一:二级等级基本要求

    掌握Python语言的基本语法规则。
    掌握不少于2个基本的Python标准库。
    掌握不少于2个Python第三方库,掌握获取并安装第三方库的方法。
    能够阅读和分析Python程序。
    熟练使用IDLE开发环境,能够将脚本程序转变为可执行程序。
    了解Python计算生态在以下方面(不限于)的主要第三方库名称:网络爬虫、数据分析、数据可视化、机器学习、Web开发等

    二:给出题目

    考生文件夹中有这样一个csv文件(如下图所示)

    三:问题1

    分析问题:打开csv文件后,将csv中的内容添加到列表中,然后根据用户键盘输入的星座输出星座的日期范围即可(详情请看代码注释)。

    代码实现:

    # !/usr/bin/env python
    # -*- encoding:utf-8 -*-
    # 作者:赖正华
    
    def read_files():
        """读取文件"""
        files = open("C:\WEXAM\000000000000\PY301-SunSign.csv","r",encoding="gbk") # 文件地址以文件所在位置为准
        data = files.readlines()  # 逐行读取文件,并返回一个列表
        lis = []
        for i in data[1:]:   # 遍历读取的文件列表,并去掉第一行
            line = i.split(',') # 用","分隔开,并返回一个列表
            lis.append(line)
        files.close()
        return lis
    def get_user_enter(lis):
        """获得用户输入"""
        user = input("请输入星座中文名称(例如:双子座):")
        for l in lis:
            if l[1] == user:
                print("{}的生日位于{}-{}之间".format(l[1],l[2],l[3]))
    if __name__ == "__main__":
        lis = read_files()
        get_user_enter(lis)

    输出示例:

     四:问题2

     

    分析问题:与问题1类似,在代码中使用循环结构和分支结构相结合的方式,根据用户键盘输入的序号输出星座的名称。字符编码和生日范围。(详情请看代码注释)

    代码实现:

    # !/usr/bin/env python
    # -*- encoding:utf-8 -*-
    # 作者:赖正华
    
    def read_files():
        """读取文件"""
        files = open("C:\WEXAM\000000000000\PY301-SunSign.csv","r",encoding="gbk")  # 打开文件,文件打开位置以文件所在位置为准
        data = files.readlines()   # 逐行读取文件,并返回一个列表,每一行即为一个列表元素
        lis = []    # 新建一个列表,用于存放分割后的新元素
        for i in data[1:]:    # 此操作去掉第0行
            line = i.split(',')  # 用','对每一行进行分割,并放入新的列表,方便后面计算。
            lis.append(line)
        files.close()
        return lis   # 让函数返回列表
    
    def get_user_enter(lis):
        """获得用户输入"""
        while True:
            user = input("请输入星座序号(例如:5):")  # 获得用户输入
            if user == 'n':   # 防止死循环
                break
            else:
                new_user = user.split()  # 对用户输入的内容进行分割,这里也是返回一个列表
                for num in new_user:
                    for line in lis:   # 遍历每一行(用','好分割过的)
                        if int(num) == int(line[2][:-2]): # 这里用户输入的星座序号要和题目给出文件做计算,也是本题的关键和规律所在
                            m1,d1 = line[2][:-2],line[2][-2:]  
                            m2,d2 = line[3][:-2],line[3][-2:]
                            print("{}({})的生日是{}月{}日至{}月{}日之间".format(line[1],line[4].strip('
    '),m1,d1,m2,d2))
    
    if __name__ == "__main__":
        lis = read_files()
        get_user_enter(lis)

    注:

    if int(num) == int(line[2][:-2]):   这行代码就是就是本题的规律,如果用户输入的序号与文件开始月日的月份相等(如:120就代表1月20日),那么该序号就是与之相对应的星座生日范围,最后根据切片输出
    相应的内容即可。

    输出示例:

    五:问题3

    分析问题:写出问题2后,问题3就简单了很多,就是在问题2的基础上,添加判断用户键盘输入的序号是否在csv文件中(或者是列表在)。

    代码实现:

    # !/usr/bin/env python
    # -*- encoding:utf-8
    # 作者:赖正华
    
    def read_files():
        """读取文件"""
        files = open("C:\WEXAM\000000000000\PY301-SunSign.csv","r",encoding="gbk")
        data = files.readlines()
        lis = []
        for i in data[1:]:
            line = i.split(',')
            lis.append(line)
        files.close()
        return lis
    
    def get_user_enter(lis):
        """获得用户输入"""
        while True:
            user = input("请输入星座序号(例如:5):")
            if user == 'n':
                break
            else:
                new_user = user.split()
                for num in new_user:
                    if int(num) <= 0 or int(num) > 12:   # 在问题2的基础上,判断用户输入序号是否在1-12之间。
                        print("输入星座序号有误!")
                    for line in lis:
                        if int(num) == int(line[2][:-2]):
                            m1,d1 = line[2][:-2],line[2][-2:]
                            m2,d2 = line[3][:-2],line[3][-2:]
                            print("{}({})的生日是{}月{}日至{}月{}日之间".format(line[1],line[4].strip('
    '),m1,d1,m2,d2))
    
    if __name__ == "__main__":
        lis = read_files()
        get_user_enter(lis)

    输出示例:

    初次写博客,内容粗糙!有看不懂的地方还请见谅!

    学习没有捷径,需要日积月累的积淀及对技术的热爱。
  • 相关阅读:
    DotNet的JSON序列化与反序列化
    DotNet指定文件显示的尺寸
    将文本文件的内容存储在DataSet中的方法总结
    Apple的LZF算法解析
    DotNet常用排序算法总结
    C#创建安全的字典(Dictionary)存储结构
    C#创建安全的栈(Stack)存储结构
    转化代码:添加在您网页中用户触发转化行为之后的地方。添加方法
    nginx配置ThinkPHP5二级目录访问
    好久没写原生的PHP调用数据库代码了分享个
  • 原文地址:https://www.cnblogs.com/laizhenghua/p/csv-test.html
Copyright © 2020-2023  润新知