python--实验12 文件

目录

知识点

第一部分:文件概述

第二部分:文件的基本操作

第三部分:目录管理

第四部分:CSV文件读写

第五部分:openpyxl等模块

小结

实验


知识点

第一部分:文件概述

  • 文件标识:找到计算机中唯一确定的文件。组成包括文件路径、文件名主干和文件扩展名。
  • 文件类型:区分了文本文件和二进制文件,并解释了它们的编码方式和存储形式。               文本文件通常以行为单位存储数据,使用ASCII、UNICODE、UTF-8等编码;                     二进制文件则以二进制形式存储,如可执行文件、图像、声音和视频等。
    • 注意: 计算机在物理层面上以二进制形式存储数据; 文本文件与二进制文件的区别不在于物理上的存储方式,而是逻辑上数据的组织方式。
    • 示例:使用不同编码方式存储整数112185
      • 文本文件存放形式
      • 二进制文件存放形式

第二部分:文件的基本操作

  • 打开文件:通过Python的内置方法和os模块中定义的方法可以操作文件。使用Python内置的open函数打开文件的过程,包括文件名和访问模式的指定,以及不同访问模式的含义。
    • open(文件名,访问模式) “文件名”必填 “访问模式”可选  open(‘itheima.txt‘, ’w‘) #open函数默认encoding为utf-8
    • 注意:如果使用open函数打开文件时,如果没有注明访问模式,则必须保证文件是存在的,否则会报异常。FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'
  • 文件读写
  • file1 = open('E:\\a.txt')    # 以只读方式打开E盘的文本文件
  • file2 = open('b.txt', 'w')   # 以只写方式打开当前目录的文件
  • file3 = open('c.txt', 'w+')       # 以读/写方式打开文本文件
  • file4 = open('d.txt', 'wb+')  # 以读/写方式打开二进制文件
  • 读取文件的方法
    • read():从指定文件读取指定字节的数据。语法格式为:read(n=-1)
    • readline():从指定文件读取一行数据。语法格式为:readline() 。
    • readlines() :读取指定文件中的全部数据,并按行存储到列表之中。文件中的每一行对应列表中的一个元素。语法格式为:readlines(hint=-1)
    • read() VS readlines()方法
      • read()(参数缺省时)和readlines()方法都可一次读取文件中的全部数据但因为计算机的内存是有限的,若文件较大,read()和readlines()的一次读取便会耗尽系统内存,所以这两种操作都不够安全。 为了保证读取安全,通常多次调用read()方法,每次读取size字节的数据。
    • 写文件的方法
      • write()可以将指定字符串写入文件,格式为:write(data)data为要写入的数据,每调用一次,写入的数据就会追加到文件末尾。
      • writelines()用于将行列表写入文件,格式:writelines(lines),lines表示要写入文件中的数据,可以是一个字符串或者字符串列表。 若写入文件的数据在文件中需要换行,需要显式指定换行符。
  • 字符与编码:文本文件支持多种编码方式,不同编码方式下字符与字节的对应关系不同,常见的编码方式以及字符与字节的对应关系如表所示。
  • 文件定位读写:Python提供了一些获取与修改文件读写位置的方法,用于获取和控制文件的读写位置。
    • tell():获取文件当前的读写位置。
    • seek():控制文件的读写位置。实现文件的随机读写。语法格式:seek(offset, from) ,调用成功后会返回当前读写位置。
      • offset:表示偏移量,即读写位置需要移动的字节数。 from:用于指定文件的读写位置,0(文件开头)、1(当前读写位置)、2(文件末尾)

第三部分:目录管理

  • OS模块:os模块中定义了与文件操作相关的函数,利用这些函数可以实现删除文件、重命名文件、创建和删除目录、获取当前目录、更改默认目录和获取目录列表等
    • 删除文件——os.remove(文件名)
    • 文件重命名——os.rename(原文件名,新文件名)
    • 创建/删除目录——os.mkdir(目录名)/os.rmdir(目录名)
    • 获取当前目录——os.getcwd()
    • 更改默认目录——os.chdir(路径名)
    • 获取目录列表——os.listdir(目录/路径)
    • 1、查询工作路径
      • path = os.getcwd()  # 查询当前工作目录,并赋值给path
      • print(path)
    • 2、查询指定目录下面的文件
      • os.listdir(path)          # 查询当前工作目录下的文件
    • 3、删除文件
      •  os.remove(r'C:\1.txt')     # 删除指定文件
    • 4、创建与删除目录
      • file_name = 'C:\\Users\\my_file'
      • os.mkdir(file_name)      # 创建文件夹
      • os.rmdir(file_name)       # 删除文件夹(只能删除空目录)

第四部分:CSV文件读写

  • 数据维度:基于维度的数据分类,包括一维数据、二维数据和多维数据的概念。
  • CSV文件格式规范:CSV文件的存储格式,字段的分隔方式和CSV文件的用途。
    • 以纯文本形式存储表格数据
    • 文件的每一行对应表格中的一条数据记录
    • 每条记录由一个或多个字段组成
    • 字段之间使用逗号(英文、半角)分隔
    • Windows系统中CSV文件的后缀名为.csv,可通过Excel或记事本打开
  • 读/写CSV文件:使用基本的文件操作和csv模块。
    • Python在程序中读取.csv文件后会以二维列表形式存储其中内容。
    • 用命令import csv即可直接调用csv模块进行csv文件的读写。
    • 将一、二维数据写入文件中,在文件中添加新的数据。

第五部分:openpyxl等模块

小结

  • 主要讲解了与文件和数据格式化相关的知识,包括文件概述、文件的基本操作(文件打开/关闭、txt文件读写)、文件操作模块os以及csv文件读写等。 通过本章的学习,了解计算机中文件的意义,熟练读取、更改文件,熟悉文件操作模块,并掌握常见的数据组织形式。

实验

一、实验目的:

1.熟练python编辑器pycharm的使用。

2.掌握python的程序控制结构

3.掌握python的文件相关函数,理解函数的功能

4.熟练掌握python的文件输入流和输出流,能掌握相关代码

5.清楚文件数据的格式,并且掌握相关数据的格式的代码

二、实验内容:

说明:基础题为必做题,提高题为选做题

  1. (基础题) 写一段程序能够将用户输入的用户名和密码保存到一个txt文件中。

运行截图:

程序代码:

import os  
import sys

# 获取用户输入的用户名和密码
username = input("请输入用户名:")
password = input("请输入密码:")

# 将用户名和密码保存到文件中
try:
    with open('userinfo.txt', 'w') as file:  # 使用'w'模式打开文件,如果文件不存在则创建
        file.write(f'用户名:{username}\n密码:{password}')
    print("用户名和密码已保存成功!")
except IOError as e:
    print(f"保存文件时发生错误
:{e}")

2.(基础题) 在实验题1的基础上,再另外写一段程序能读取上述文件中的用户名和密码,实现登录功能。

运行截图:

程序代码:

import os  
import sys

def login():
    # 提示用户输入用户名和密码
    input_username = input("请输入用户名:")
    input_password = input("请输入密码:")

    try:
        # 打开保存用户名和密码的文件
        with open('userinfo.txt', 'r') as file:
            lines = file.readlines()  # 读取所有行

        # 检查输入的用户名和密码是否与文件中的匹配
        if len(lines) >= 2 and lines[0].strip() == f'用户名:{input_username}' and lines[1].strip() == f'密码:{input_password}':
            print("登录成功!")
        else:
            print("用户名或密码错误!")
    except IOError as e:
        print(f"读取文件时发生错误:{e}")

# 调用登录函数
login()

3.(基础题)文件准备:在D盘新建一个文件夹a,a下有3个txt文件,分别是1.txt,2.txt,3.txt,文件内容随意填写。

要求:请编写程序代码,在C盘下新建一个文件夹test,然后将整a文件夹拷贝到test下。

运行截图:

程序代码:

import os
import shutil

# 源文件夹路径
source_folder = 'D:\\a'
# 目标文件夹路径
destination_folder = 'C:\\test'

# 确保源文件夹存在
if not os.path.exists(source_folder):
    print(f"源文件夹 {source_folder} 不存在。")
else:
    # 如果目标文件夹不存在,则创建它
    if not os.path.exists(destination_folder):
        os.makedirs(destination_folder)
    
    # 确保目标文件夹是空的,如果不是,则清空它
    if os.listdir(destination_folder):
        for filename in os.listdir(destination_folder):
            file_path = os.path.join(destination_folder, filename)
            if os.path.isfile(file_path) or os.path.islink(file_path):
                os.unlink(file_path)  # 删除文件或链接
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)  # 删除目录树

    # 复制整个文件夹
    shutil.copytree(source_folder, os.path.join(destination_folder, 'a'))

    print(f"文件夹 {source_folder} 已成功复制到 {destination_folder} 下。")

4. (提高题) 打开一个文本文件,编写程序读取其内容,并把其中的大写字母变成小写字母,小写字母变成大写字母。

(可以手动新建一个文件,hello.txt,内容如下:

Rain is falling all around,

It falls on field and tree,

It rains on the umbrella here,

And on the ships at sea.)

运行截图:

程序代码:

# 要处理的文件路径
input_file_path = 'hello.txt'
# 输出文件路径,这里我们覆盖原文件
output_file_path = 'hello_transformed.txt'

# 读取文件内容
try:
    with open(input_file_path, 'r') as file:
        content = file.read()

    # 转换大小写
    transformed_content = content.swapcase()

    # 将转换后的内容写回文件
    with open(output_file_path, 'w') as file:
        file.write(transformed_content)

    print(f"文件 '{input_file_path}' 的内容已转换并保存到 '{output_file_path}'。")
except IOError as e:
    print(f"处理文件时发生错误:{e}")

5. (提高题) 已知一个学生成绩表score.csv文件中存放着学生的姓名与各科成绩,请从取该成绩表中的数据,统计每位学生的总成绩(各科成绩之和),然后将各科成绩及总分写入一个新文件count.csv中。

思路提示:

#从csv文件中读取表格数据

#读取每一行,第一行lines[0]之后追加"总分",即lines[i].append('总分')

#之后每一行计算lines[i][1]~lines[i][len(lines[i])-1]的和

#将计算结果追加到lines[i]中

运行效果

原始成绩表score.csv:

追加了总分后的新成绩表count.csv:

程序代码:

import csv

# 原始成绩表文件路径
input_csv_path = 'score.csv'
# 新的成绩表文件路径,包含总分
output_csv_path = 'count.csv'

try:
    # 读取原始成绩表
    with open(input_csv_path, newline='', encoding='utf-8') as csvfile_in:
        reader = csv.reader(csvfile_in)
        lines = [line for line in reader]
    
    # 在第一行标题后追加"总分"
    lines[0].append('总分')

    # 计算每位学生的总成绩并追加到对应的行
    for i in range(1, len(lines)):
        # 将成绩列(从索引1开始到倒数第二列)转换为整数并求和
        total_score = sum(int(lines[i][j]) for j in range(1, len(lines[i])-1))
        # 将计算的总分追加到当前行的末尾
        lines[i].append(str(total_score))

    # 将更新后的成绩表写入新的CSV文件
    with open(output_csv_path, 'w', newline='', encoding='utf-8') as csvfile_out:
        writer = csv.writer(csvfile_out)
        writer.writerows(lines)

    print(f"更新后的成绩表已保存到 '{output_csv_path}'.")
except IOError as e:
    print(f"处理CSV文件时发生错误:{e}")
except ValueError as e:
    print(f"转换成绩时发生错误:{e}")

  • 29
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值