目录

  • 前言
    • ●  Python解释器安装
    • ●  PyCharm开发环境
  • Python程序设计实验
    • ●  实验1 IDLE与代码编写规范
    • ●  实验2 输入输出与数据类型
    • ●  实验3 字符串处理
    • ●  实验4 数据运算
    • ●  实验5 列表与元组应用
    • ●  实验6 字典与集合应用
    • ●  实验7 if语句与match语句
    • ●  实验8 使用循环语句
    • ●  实验9 异常处理
    • ●  实验10 函数应用
    • ●  实验11 类的应用
    • ●  实验12 模块应用
    • ●  实验13  应用re模块
    • ●  实验14 文件处理
    • ●  实验15 用户界面设计
    • ●  实验18 SQLite数据库应用
    • ●  理论考试模拟试题A
    • ●  理论考试模拟试题B
    • ●  理论考试模拟试题C
    • ●  理论考试模拟试题D
  • 学习参考
    • ●  01 Python及其IDLE环境
    • ●  02 Python代码规范
    • ●  03 常量和变量
    • ●  04 输入输出
    • ●  05 运算符
    • ●  06 数值类型
    • ●  07 字符串
    • ●  08 列表
    • ●  09 元组
    • ●  10 字典
    • ●  11 集合
    • ●  12 条件语句
    • ●  13 循环语句
    • ●  14 异常处理
    • ●  15 自定义函数
    • ●  16 内置函数
    • ●  17 模块导入与定义
    • ●  18 math模块
    • ●  19 os模块
    • ●  20 time模块
    • ●  21 random模块
    • ●  22 文本文件
    • ●  23 二进制文件
    • ●  24 类的创建和使用
    • ●  25 类的继承与多态
 实验14 文件处理
任务1 文件处理-写数据到文本文件

输入用","分隔的多个整数,将其升序排序后写入文本文件"ps14t1.txt"。如果写入成功,则输出"succeed"。如果输入无效数据或写入失败,则输出"failed"。

要求:

1、数据采用"UTF-16"编码写入文件。

2、程序保存到:s14t1.py

3、程序执行效果:

输入整数序列:12,31,27,16,8

输出:succeed

【参考与提示】

    写数据到文本文件的一般步骤:

1、open函数打开文件。需传递3个参数:

(1)file:文本文件名(含路径)。

(2)mode:打开模式,必须是"w"。

(3)encoding:使用的编码。

2、写数据到文件。使用文件对象的内置函数write。注意:数据需转换为字符串。

3、使用文件对象的内置函数close关闭文件。


try:

    s = input("输入整数序列:")

    nums = s.split(',')

    nums = [int(num) for num in nums]

    nums = sorted(nums)

    t = ','.join(map(str, nums))

##    t = str(nums).replace(" ","")[1:-1]


    # 以写入模式("w")打开文件"ps14t1.txt",并指定编码为UTF-16

    # 使用with语句自动管理文件资源,文件操作完成后会自动关闭

    with open("ps14t1.txt", "w", encoding="UTF-16") as file:

        file.write(t)

    print("succeed")

except:

    print("failed")


任务2 文件处理-从文本文件读取数据

从文件ps14t2A.txt中读取全部整数并保存到列表a中。再根据输入的整数n输出a中大于n的最小整数。如果输入无效数据,则约定n=60。如果a中不存在大于n的整数,则输出"None"。

要求:

1、先通过记事本浏览文件,确定数据编码方式和数据存储特点,再在代码中使用该编码打开文件。

2、程序保存到:s14t2.py

3、程序执行效果:

输入整数:82

输出:min=83

【参考与提示】

1、使用记事本打开文件后,单击“文件”菜单“另存为”命令,可打开“另存为”对话框。在该对话框正下方可查看编码。

2、使用文件对象的内置函数:

(1)read( ):读取全部数据。

(2)readline( ):读取一行数据。

(3)readlines( ):读取全部行数据。

注:以上函数均是从当前读取位置开始读取数据。

示例(f是以"r"模式打开的文件对象):

s=f.readline( )     #先读取一行

a=f.readlines( )   #再读取其他行


try:

    # 以UTF-8编码打开文件并读取全部内容

    with open('ps14t2A.txt', 'r', encoding='utf-8') as f:

        content = f.read( )  # 读取文件全部内容为一个字符串

        

    # 将字符串按逗号分割成多个子字符串,并转换为整数列表

    a = list(map(int, content.split(',')))

except:

    a = [ ]   # 若文件读取失败或内容无法转换为整数,重置列表为空


try:

    n = int(input("输入整数:"))

except:

    n = 60


greater = [x for x in a if x > n]

if greater:

    print(f"min={min(greater)}")

else:

    print("None")


任务3 文件处理-数据写入二进制文件

输入一个字符串,将其转换为"GB18030"编码的字节串后写入文件ps14t3.ytt。如果写入成功,输出"T"。否则输出"F"。

要求:

1、程序保存到:s14t3.py

3、程序执行效果:

输入字符串:82ugood99

输出:T

【参考与提示】

1、使用open函数创建二进制文件对象时,模式必须设置为"wb"才能写入数据。

2、字符串的内置函数encode可返回指定编码后的字节串。


s = input("输入字符串:")

try:

    bytes_data = s.encode('GB18030')    # 将字符串编码为GB18030字节数据

    with open('ps14t3.ytt', 'wb') as f:    # 以二进制写入模式打开文件并写入数据

        f.write(bytes_data)

    print("T")

except:

    print("F")


任务4 文件处理-从二进制文件读数据

已知文件ps14t4A.tuw中的数据(用","分隔的整数序列)是通过ANSI编码后写入的字节串。读取这些整数,输出它们的最大值与n的和。其中n从键盘输入。如果输入数据无效,则约定n=100。

要求:

1、程序保存到:s14t4.py

3、程序执行效果:

输入整数:82

输出:sum=178

【参考与提示】

1、使用open函数创建二进制文件对象时,模式必须设置为"wb"才能写入数据。

2、字符串的内置函数encode可返回指定编码后的字节串。


max_num = 0

try:

    with open('ps14t4A.tuw', 'rb') as f:

        content = f.read( ).decode('GBK')        # 读取字节数据并用GBK解码为字符串

        

    nums = list(map(int, content.split(',')))

    max_num = max(nums)

    n = int(input("输入整数:"))

except:  

    n = 100

 

print(f"sum={max_num + n}")


任务5 文件处理-二进制文件综合应用

定义函数pwd(file),能够对任意文件进行加密。对用该函数加密的文件也可调用该 函数解密。并利用以下代码调试该函数。加密方法:取文件的前10个字节(文件不足10个字节时取其全部字节)得到字节串s。s[k]与元组a=(163,182,213,175,207,192)的元素a[k%6]按位异或。k=0,1,2,...。

s=input("输入文件名:")

if(pwd(s)):print("Finished")

else:print("Failed")

要求:

1、程序保存到:s14t5.py

3、程序执行效果:

输入文件名:d:\\ps14t5.png

输出:Finished

【参考与提示】

求解思路:

1、以"rb+"模式打开文件。

2、使用文件对象的seek函数将读写位置移到文件尾。

3、使用文件对象的tell函数得到文件大小。

4、根据文件大小确定应读取的字节数n。

5、将读写位置定位到文件头。

6、读取n个字节的数据,得到字节串s。

7、利用列表推导式对s加密,得到列表b。

8、将读写位置定位到文件头。

9、将b转换为字节串后写入文件。


def pwd(file):

    a = (163, 182, 213, 175, 207, 192)  # 异或操作的密钥元组

    try:

        with open(file, 'rb+') as f:     # 以读写模式打开二进制文件

            f.seek(0, 2)                 # 移动指针到文件末尾

            size = f.tell( )              # 获取文件总字节数

            n = min(10, size)            # 确定读取前n个字节(最多10字节)

            if n == 0:                   # 处理空文件情况

                return True

            f.seek(0)                   # 回到文件开头读取数据

            s = f.read(n)               # 读取前n个字节

            # 生成加密/解密后的字节列表(异或运算可逆)

            encrypted = bytes([s[k] ^ a[k % 6] for k in range(n)])

            f.seek(0)                   # 回到文件开头准备写入

            f.write(encrypted)          # 覆盖写入处理后的字节

            return True

    except Exception:

        return False                    # 操作失败标志


s = input("输入文件名:")

# 调用pwd函数进行加密/解密,并输出结果

if pwd(s):

    print("Finished")

else:

    print("Failed")