python读写文件练习

1.请你通过文件读写命令,读取 photo1 里的数据(提示见代码区开头)。
然后,新建名为“photo2”的图片(在同一个文件夹),写入读到的数据。
这样,我们就通过文件读写的代码,完成了图片的复制(而非鼠标右键)。

with open('photo2.png','rb') as file:  # 以“rb”模式打开图片
    data = file.read()
    with open('photo3.png','wb') as newfile:  # 以“wb”模式写入
        newfile.write(data)

2.现在有这样一个叫scores.txt的文件,里面有赫敏、哈利、罗恩、马尔福四个人的几次魔法作业的成绩。
但是呢,因为有些魔法作业有一定难度,教授不强制同学们必须上交,所以大家上交作业的次数并不一致。
罗恩 23 35 44
哈利 60 77 68 88 90
赫敏 97 99 89 91 95 90
马尔福 100 85 90
希望你来统计这四个学生的魔法作业的总得分,然后再写入一个txt文件。注意,这个练习的全程只能用Python。

file1 = open('scores.txt','r',encoding='utf-8') 
file_lines = file1.readlines() 
file1.close()

final_scores = []

for i in file_lines:
    data =i.split()
    sum = 0  # 先把总成绩设为0
    for score in data[1:]:  # 遍历列表中第1个数据和之后的数据
        sum = sum + int(score)  # 然后依次加起来,但分数是字符串,所以要转换    
    result = data[0]+str(sum)+'\n'  # 结果就是学生姓名和总分
    print(result)
    final_scores.append(result)

print(final_scores)

sum1 = open('winner.txt','w',encoding='utf-8') 
sum1.writelines(final_scores)
sum1.close()

3.现在,我们计划对课堂上得到的“winner”文档再行处理一下。
让学员的成绩从高到低排列,然后放到新文档“winner_new.txt”。

# 下面注释掉的代码,皆为检验代码(验证每一步的思路和代码是否达到目标,可解除注释后运行)。

file1 = open('winner.txt','r',encoding='utf-8') 
file_lines = file1.readlines() 
file1.close()

dict_scores = {}
list_scores = []
final_scores = []

# print(file_lines) 
# print(len('\n'))

# 打印结果为:['罗恩102\n', '哈利383\n', '赫敏570\n', '马尔福275\n']
# 经过测试,发现'\n'的长度是1。所以,名字是“第0位-倒数第5位”,分数是“倒数第4位-倒数第二位”。
# 再根据“左取右不取”,可知:name-[:-4],score-[-4:-1]

for i in file_lines:  # i是字符串。
    print(i)
    name = i[:-4]  # 取出名字(注:字符串和列表一样,是通过偏移量来获取内部数据。)
    score = int(i[-4:-1])  # 取出成绩
    print(name)
    print(score)
    dict_scores[score] = name  # 将名字和成绩对应存为字典的键值对(注意:这里的成绩是键)
    list_scores.append(score)

# print(list_scores)
list_scores.sort(reverse=True)  # reverse,逆行,所以这时列表降序排列,分数从高到低。
# print(list_scores)

for i in list_scores:
    result = dict_scores[i] + str(i) + '\n'
    #print(dict_scores[i])
    # print(result)
    final_scores.append(result)

print(final_scores)  # 最终结果

winner_new = open('winner_new.txt','w',encoding='utf-8') 
winner_new.writelines(final_scores)
winner_new.close()

记录:(1)自己做的时候在考虑如何根据已排序好的列表,依次输出字典的值。最后终于想出来了,就是对列表遍历(因为这时列表的成绩已经是按高低排序的),然后将字典对应的键(这里就是每个人的名字)输出dict_scores[i],然后将名字和分数拼接,加入一个新的列表final_scores = []即可。
(2)遇到的第二个问题是:在写入文件的时候,我用的是winner_new.write(final_scores),然后出现报错,因为write只能写入字符串,不能写入列表。因此这里要用writelines即可。

4.练习要求
语文老师将一些古诗存在txt文档里,一句一行。
最近,他计划抽一些古诗,自己设置一些空来让学生默写。
请你用代码帮老师完成这项工作(只要处理了一个文档,加上循环就能处理无数个文档了)。
锦瑟
[唐] 李商隐

锦瑟无端五十弦,
一弦一柱思华年。
庄生晓梦迷蝴蝶,
望帝春心托杜鹃。
沧海月明珠有泪,
蓝田日暖玉生烟。
此情可待成追忆,
只是当时已惘然。

list_test = ['一弦一柱思华年。\n','只是当时已惘然。\n']  # 将要默写的诗句放在列表里。
with open ('poem2.txt','r') as f:
    lines = f.readlines()
print(lines)
with open('poem2.txt','w') as new:
    for line in lines:
        if line in list_test:  # 属于默写列表中的句子,将其替换成横线。
            new.write('____________。\n')
        else:
            new.write(line)
### Python 文件读写练习题与示例 #### 使用 `open` 函数打开文件并执行基本操作 Python 提供了内置的 `open()` 函数来处理文件的打开、关闭等操作。此函数返回一个文件对象,该对象提供了多种方法来进行文件的操作。 ```python # 打开文件 'example.txt' 并准备写入内容 with open('example.txt', mode='w', encoding='utf-8') as file: file.write("这是一个测试字符串。\n") # 向文件中写入一行文字 ``` 上述代码片段展示了如何创建一个的文本文件或将现有文件清空后重写入内容[^2]。 #### 处理二进制文件读写操作 当涉及到图像或其他类型的非纯文本文件时,则需采用不同的方式——即以二进制模式(`rb`, `wb`)访问这些资源: ```python binary_data = b'\x00\xFF\xAA' with open('data.bin', 'wb') as binary_file: binary_file.write(binary_data) # 读取刚才保存的数据 with open('data.bin', 'rb') as binary_file: restored_binary_data = binary_file.read() print(restored_binary_data == binary_data) # 输出 True 表明成功恢复原始数据 ``` 这段程序说明了怎样通过指定编码格式为 `'rb'`(只读) 或 `'wb'`(覆盖写入),从而实现对二进制文件的有效管理和操作[^3]。 #### 实现 CSV 到 JSON 的转换过程 为了完成从逗号分隔值 (CSV) 转换成 JavaScript 对象表示法(JSON), 可利用标准库中的 csv 和 json 模块: ```python import csv import json def convert_csv_to_json(csv_filename, json_filename): with open(csv_filename, newline='', encoding="utf-8") as csvfile,\ open(json_filename, "w", encoding="utf-8") as jsonfile: reader = csv.DictReader(csvfile) data_list = list(reader) json.dump(data_list, jsonfile, ensure_ascii=False, indent=4) convert_csv_to_json('input.csv', 'output.json') ``` 这里定义了一个简单的辅助函数 `convert_csv_to_json()`, 它接收两个参数分别代表输入和输出路径名;内部逻辑先解析给定的 .csv 文件再将其序列化成相应的 .json 结构存储起来.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值