2-1-08 文件操作 - 作业

1.基于csv格式实现 用户的注册 & 登录认证。详细需求如下:

  • 用户注册时,新注册用户要写入文件csv文件中,输入Q或q则退出。
  • 用户登录时,逐行读取csv文件中的用户信息并进行校验。
  • 提示:文件路径须使用os模块构造的绝对路径的方式。
# 1. 文件路径处理
import os

base_dir = os.path.dirname(os.path.abspath(__file__))
db_file_path = os.path.join(base_dir, "file", "bd.csv")

# 用户注册
while True:
    choice = input("是否进行用户注册(Y/N):")
    choice = choice.upper()
    if choice not in {'Y', 'N'}:
        print("输入有误,请重新输入")
        continue

    if choice == "N":
        break
    #输入正确注册信息
    with open(db_file_path,mode='a',encoding='utf-8') as file_object:
        user = input("请输入用户名(Q或q则退出):")
        if user.upper() == "Q":
            break
        pwd = input("请输入密码:")
        #将内容拼接写入文件中
        file_object.write("{},{}\n".format(user,pwd))
        #立即将缓存写入内存中
        file_object.flush()
    break


# 用户登录
print("欢迎使用XX系统,请登录")
username = input("请输入用户名:")
password = input("请输入密码:")

#查看存储用户名和密码的文件是否存在
if not os.path.exists(db_file_path):
    print("用户文件不存在")
else:
    with open(db_file_path, mode='a', encoding='utf-8') as file_object:
        for line in file_object:
            user,pwd = line.strip().strip()
            if username == user and pwd == password:
                print("登录成功")
                break
            else:
                print("登录失败")

2. 补充代码:实现去网上获取指定地区的天气信息,并写入到Excel中。

import requests

while True:
    city = input("请输入城市(Q/q退出):")
    if city.upper() == "Q":
        break
    url = "http://ws.webxml.com.cn//WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName={}".format(city)
    res = requests.get(url=url)
    print(res.text)

    # 1.提取XML格式中的数据
    # 2.为每个城市创建一个sheet,并将获取的xml格式中的数据写入到excel中。 

答案:

import os
import requests
from xml.etree import ElementTree as ET
from openpyxl import workbook

# 文件处理路径
base_dir = os.path.dirname(os.path.abspath(__file__))
target_excel_file_path = os.path.join(base_dir, 'weather.xlsx')

# 创建exc且默认会创建一个sheet(名称为sheet)
wb = workbook.Workbook()
del wb['Sheet']

while True:
    city = input("请输入城市(Q/q退出:")
    if city.upper() == "Q":
        break
    url = "http://ws.webxml.com.cn//WebServices/WeatherWebService.asmx/getWeatherbyCityName?theCityName={}".format(city)
    #发送get请求
    res = requests.get(url=url)
    #获取城市信息
    #print(res.text)

    #1.提取XML格式中的数据
    root = ET.XML(res.text)

    #2.为每个城市创建一个sheet,并将获取xml格式中的数据写入到Excel中
    sheet = wb.create_sheet(city)
    # row_index 维护的行
    # node  是xml的内容
    for row_index,node in enumerate(root,1):
        text = node.text
        cell = sheet.cell(row_index,1)
        cell.value = text

wb.save(target_excel_file_path)

3. 读取ini文件内容,按照规则写入到Excel中。

ini文件内容如下:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=py-mysql-bin
character-set-server=utf8
collation-server=utf8_general_ci
log-error=/var/log/mysqld.log
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

[client]
default-character-set=utf8

读取ini格式的文件,并创建一个excel文件,且为每个节点创建一个sheet,然后将节点下的键值写入到excel中,按照如下格式。
![[assets/Pasted image 20221015130339.png]]

  • 首行,字体白色 & 单元格背景色蓝色。
  • 内容均居中。
  • 边框。
import os
import configparser
from openpyxl import workbook
from openpyxl.styles import Alignment, Border, Side, Font, PatternFill, GradientFill

# 文件处理路径
bass_dir = os.path.dirname(os.path.abspath(__file__))
fiel_path = os.path.join(bass_dir, 'zy.ini')
target_excel_file_path = os.path.join(bass_dir, 'ini.xlsx')

# 创建Excel且默认会创建一个sheet(名字为sheet)
wb = workbook.Workbook()
del wb['Sheet']
# 解析ini格式文件
config = configparser.ConfigParser()
config.read('./zy.ini', encoding='utf-8')

# 获取每个节点,并为每个节点创建一个sheet
for section in config.sections():
    # 在Excel中创建一个sheet,名称为ini文件的节点名称
    sheet = wb.create_sheet(section)

    # 设置边框和居中(因为表头和内容都要,统一写这里)
    # 边框  thin 细的   000000  黑色
    side = Side(style="thin", color="000000")
    # top 上  bottom 下  left 左  right 右
    border = Border(top=side, bottom=side, left=side, right=side)
    # 对齐方式:居中  horizontal,水平方向对齐方式  vertical,垂直方向对齐方式
    align = Alignment(horizontal='center', vertical='center')

    # 在sheet中设置表头
    title_dict = {'A1': '键', 'B1': '值'}
    for position, text in title_dict.items():
        # 找到单元格
        cell = sheet[position]
        # 设置值
        cell.value = text
        # 设置居中
        cell.alignment = align
        # 设置背景颜色   solid 无颜色
        cell.fill = PatternFill("solid", fgColor="6495ED")
        # 设置字体颜色
        cell.font = Font(name="微软雅黑", color="FFFFFF")
        # 设置边框
        cell.border = border

    # 读取此节点下的所有键值,并将键值写入到当前sheet中
    # row_index  显示行
    row_index = 2
    for group in config.items(section):
        # group是个元组,group = ("datadir","/var/lib/mysql")
        # col表示列
        for col, text in enumerate(group, 1):
            #找到单元格
            cell = sheet.cell(row_index, col)
            #设置居中
            cell.alignment = align
            #设置边框
            cell.border = border
            #设置值
            cell.value = text
        row_index += 1
# 写入到Excel表格中
wb.save(target_excel_file_path)

4. 补充代码,实现如下功能。

import requests

# 1.下载文件
file_url = 'https://files.cnblogs.com/files/wupeiqi/HtmlStore.zip'
res = requests.get(url=file_url)
print(res.content)

# 2.将下载的文件保存到当前执行脚本同级目录下 /files/package/ 目录下(且文件名为HtmlStore.zip)

# 3.在将下载下来的文件解压到 /files/html/ 目录下

答案:

import os
import  shutil
import requests

# 文件处理路径
bass_dir = os.path.dirname(os.path.abspath(__file__))
download_folder = os.path.join(bass_dir,'files', 'package')
# 判断文件夹是否存在
if not os.path.exists(download_folder):
    os.makedirs(download_folder)

# 1.下载文件
file_url = 'https://files.cnblogs.com/files/wupeiqi/HtmlStore.zip'
res = requests.get(url=file_url)


# 2.将下载的文件保存到当前执行脚本同级目录下 /files/package/ 目录下(且文件名为HtmlStore.zip)
# 找到下载的url最后一个HtmlStore.zip字段,也就是压缩包的文件名
file_name = file_url.split('/')[-1]
# 把下载路径和文件名进行拼接
zip_file_path = os.path.join(download_folder,file_name) #.../files/package/HtmlStore.zip
 # 把下载的路径写入文件中
with open(zip_file_path,mode='wb') as file_object:
    file_object.write(res.content)

# 3.在将下载下来的文件解压到 /files/html/ 目录下
unpack_folder = os.path.join(bass_dir,'files','html')
shutil.unpack_archive(filename=zip_file_path,extract_dir=unpack_folder,format='zip')
posted @ 2022-10-19 09:34  布丁家的苏苏  Views(8)  Comments(0)    收藏  举报