Python进行基本文件操作

一、实验目的

  1. 熟练掌握内置函数open()的应用
  2. 理解字符串编码格式对文本文件操作的影响
  3. 熟练掌握上下文管理语句with的用法
  4. 了解标准库json对JSON文件的读写方法
  5. 了解扩展库python-docx、openpyxl、python-pptx对Office文档的操作

二、实验内容

2.1 对txt文本文件操作

合并两个.txt文件的内容,两个文件的多行内容交替写入结果文件,如果一个文件内容较少,则把另一个文件的剩余内容写入结果文件尾部。

# 待合并文件
txt_list =["./1.txt", "./2.txt"]
# 结果文件
result_txt = "./result.txt"

def merge_txt(txt_list, result_txt):
    with open(result_txt, 'w') as result:
        with open(txt_list[0],"r") as file1:
            with open(txt_list[1],"r") as file2:
                # 读取两个文件的所有行
                lines1 = file1.readlines()
                lines2 = file2.readlines()
                # 遍历最长的文件行数
                for i in range(max(len(lines1), len(lines2))):
                    # 文件1行数没有全部写完
                    if i < len(lines1):
                        result.write(lines1[i])
                    # 文件2行数没有全部写完
                    if i < len(lines2):
                        result.write(lines2[i])

merge_txt(txt_list, result_txt)

1.txt内容:
在这里插入图片描述

2.txt内容:
在这里插入图片描述
结果文件:
在这里插入图片描述

2.2 对CSV文件操作

编写程序,模拟生成某饭店自2020年1月1日开始连续100天试营业期间的营业额数据并写入CSV文件。文件中共两列,第一列为日期,第二列为营业额,文件第一行为表头或字段名称。假设该饭店第一天营业额基数为500元,每天增加5元,除此之外每天还会随机增加5到50元不等。

import datetime
import random
import csv

# 初始化时间
init_time = datetime.datetime(2020,1,1)
# 营业额基数
base_money = 500
# 结果列表
result_list = []

for i in range(100):
    # 这天的时间
    time = init_time + datetime.timedelta(days=i)
    # 随机收入
    random_money = random.randint(5,50)
    # 这里计算下一天的营业额没有包括前一天的[5, 50]的随机收入
    today_money = base_money + 5*i + random_money
    result_list.append({"time":time,"money":today_money})

# 将营业额数据写入CSV文件
with open("./result.csv", "w", newline="") as result:
    writer = csv.DictWriter(result, fieldnames=["time", "money"])
    writer.writeheader()
    for info in result_list:
        writer.writerow({"time":info["time"].strftime('%Y-%m-%d'),"money":info["money"]})

结果文件:
在这里插入图片描述

2.3 对word文件进行操作

编写程序,读取并输出word文档中红色的文字。

import docx

def find_red_words(file_path):
    file = docx.Document(file_path)
    # 用来存储红色文字的列表
    red_words = []
    for paragraph in file.paragraphs:
        for run in paragraph.runs:
            # 判断字体颜色是否为红色
            # if run.font.color.rgb == 'FF0000': # 不能这么写
            if run.font.color.rgb == docx.shared.RGBColor(255, 0, 0):
                red_words.append(run.text)
                print(run.text)
        
find_red_words("./word.docx")

word.docx文件内容:
在这里插入图片描述
运行结果:
在这里插入图片描述

2.4 对xlsx表格操作

  1. 文件“超市营业额.xlsx”中记录了某超市2019年3月1日至5日各员工在不同时段、不同柜台的销售额。编写程序,读取该文件中的数据,并统计每个员工的销售总额,每个时段的销售总额、每个柜台的销售总额。
import openpyxl

def calculate_sale(xlsx_path, sheet_name):
    # 整个表格
    workbook = openpyxl.load_workbook(xlsx_path)
    # 工作簿
    sheet1 = workbook[sheet_name]

    # 三个字典分别用来存储每个员工销售总额,每个时段销售总额,每个柜台销售总额
    employee_sale ={}
    time_sale ={}
    counter_sale ={}

    for row in sheet1.iter_rows(min_row=2): # 跳过第一行
        employee = row[0].value # 工号
        time = row[3].value # 时间段
        counter = row[5].value # 柜台
        money = float(row[4].value) # 销售额

        # 按照员工统计
        if employee in employee_sale:
            employee_sale[employee] += money
        else:
            employee_sale[employee] = money
        
        # 按照时间段统计
        if time in time_sale:
            time_sale[time] += money
        else:
            time_sale[time] = money
        
        # 按照柜台统计
        if counter in counter_sale:
            counter_sale[counter] += money
        else:
            counter_sale[counter] = money

    print("按照员工统计销售总额:")
    for employee, money in employee_sale.items():
        print(f"{employee} : {money:.2f}")
    print()

    print("按照时间段统计销售总额:")
    for time, money in time_sale.items():
        print(f"{time} : {money:.2f}")
    print()

    print("按照柜台统计销售总额:")
    for counter, money in counter_sale.items():
        print(f"{counter} : {money:.2f}")

calculate_sale("./超市营业额.xlsx", "营业额")

表格内容:
在这里插入图片描述

运行结果:
在这里插入图片描述

  1. 编写程序操作Excle文件,读取文件“大家的特长.xlsx”中的内容,并统计A-H列中的内容,在后面追加一列,对所有人的特长进行汇总。(该文件在超市营业额.xlsx中的第二张工作簿)
import openpyxl

def gather_habits(xlsx_path, sheet_name):
    # 整个表格
    workbook = openpyxl.load_workbook(xlsx_path)
    # 需要的工作簿
    sheet2 = workbook[sheet_name]
    # 新增一列
    sheet2.insert_cols(sheet2.max_column + 1)
    new_max_column = sheet2.max_column + 1

    # 最后一列名称为“所有特长”
    sheet2.cell(row=1, column=new_max_column).value = "所有特长"
    for i in range(2, sheet2.max_row+1):
        all = ""
        # 遍历所有爱好栏,如果是“是”,则添加到“所有特长”中
        for j in range(2, new_max_column):
            if sheet2.cell(row=i, column=j).value == "是":
                all += sheet2.cell(row=1, column=j).value + " "
        sheet2.cell(row=i, column=new_max_column).value = all

    workbook.save(xlsx_path)

gather_habits("./超市营业额.xlsx", "爱好")

文件内容:
在这里插入图片描述

运行结果:
在这里插入图片描述

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值