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('\n'),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('\n'),m1,d1,m2,d2))

if __name__ == "__main__":
    lis = read_files()
    get_user_enter(lis)

輸出示例:

初次寫博客,內容粗糙!有看不懂的地方還請見諒!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM