【SWUST派森】西南科技大学Python零基础期末快速复习指南(三)文件操作类题型1

前言

家人们,你们的点赞就是我的动力,我又来更新了嘻嘻。这次打算做一个文件操作类题型系列,我想把这类题放在一起会更方便大家理解和学习。

关于如何读文件?

本人一开始一头雾水,所以先去B站大学找了几个视频学习,有了一点基础的概念。所以我会把我认为有用的链接放在这里,建议大家如果也和我刚开始一样一头雾水的话,去看看学习视频再进行文件操作类题型的学习。

(预学习链接如下)【[31] Python文件操作 | 会读文件,程序便有了眼睛】 [31] Python文件操作 | 会读文件,程序便有了眼睛_哔哩哔哩_bilibili怎么用代码处理文件内容——把文件里的内容复制到代码里?麻烦麻烦,达咩达咩!学会读文件,事事都方便 ∠( ᐛ 」∠)_, 视频播放量 92230、弹幕量 273、点赞数 2117、投硬币枚数 996、收藏人数 1766、转发人数 258, 视频作者 林粒粒呀, 作者简介 前北美亚马逊工程师,致力于做银河系最好懂的编程教程~ | 更多线上课程在主页“课程”一栏,相关视频:20分钟学完一遍python基础,【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)的Python+爬虫公开课程,从入门到(不)入狱 !,【python技巧058】用import拆文件搞大项目,跨文件引用、循环引用,十分钟学会编程的本质【收藏级】,两小时python速成课程,【完整版】《Python》6.5小时快速突击|期末不挂科必备【蜂考】,一周练完这Python100道练习题,你的编程就老腻害啦!(每天一练,必成大神!),[期末]从零储备一小时讲完python基础,3小时超快速入门Python | 动画教学【2025新版】【自学Python教程】【零基础Python】【计算机二级Python】【Python期末速成】,你觉得这辈子都学不会编程?超基础Python课程,3小时快速入门|自学Python教程|零基础Python|计算机二级Python|Python期末速成https://www.bilibili.com/video/BV1ha411g79T/?share_source=copy_web&vd_source=ba41b960143ebcbcd0c22d5239b3e83c

1.f=open("./data.txt","r",encoding="utf-8")

# 打开并读取文件
f = open("./data.txt", "r", encoding="utf-8")
content = f.read()  # 读取文件的全部内容
print(content)  # 打印文件内容
f.close()  # 关闭文件

2.with open("./data.txt","r",encoding="utf-8") as fr

# 使用 with 语句打开并读取文件
with open("./data.txt", "r", encoding="utf-8") as f:
    content = f.read()  # 读取文件的全部内容
    print(content)  # 打印文件内容
# 文件会在 with 代码块结束后自动关闭

更推荐大家用第二种写法!!!

关于如何写文件?

(预学习链接如下)【[32] Python文件操作 | 会写文件,程序便有了记忆】 [32] Python文件操作 | 会写文件,程序便有了记忆_哔哩哔哩_bilibili想查看程序运行结果,每次都要跑一遍程序??不优雅!会读文件,也要会写文件把输出结果储存到文件里,轻松储存和共享给他人 ∠( ᐛ 」∠)_, 视频播放量 43375、弹幕量 156、点赞数 1104、投硬币枚数 535、收藏人数 561、转发人数 81, 视频作者 林粒粒呀, 作者简介 前北美亚马逊工程师,致力于做银河系最好懂的编程教程~ | 更多线上课程在主页“课程”一栏,相关视频:【Python+爬虫】爆肝两个月!拜托三连了!这绝对是全B站最用心(没有之一)的Python+爬虫公开课程,从入门到(不)入狱 !,你觉得这辈子都学不会编程?超基础Python课程,3小时快速入门|自学Python教程|零基础Python|计算机二级Python|Python期末速成,重磅来袭!超250万读者的选择:蟒蛇书《Python 编程:从入门到实践(第3版)》,最新版配套视频抢先看,一周练完这Python100道练习题,你的编程就老腻害啦!(每天一练,必成大神!),《Python》3小时期末速成课!!!期末冲刺 | 考前速成 | 考点汇总 | 期末不挂科!,3小时超快速入门Python | 动画教学【2025新版】【自学Python教程】【零基础Python】【计算机二级Python】【Python期末速成】,Python 文件打开与读取,python第八章-文件操作,【干货】python全套教程之Python文件操作(懂中文就能学会),【官方随书视频】最热门编程入门书《Python编程:从入门到实践(第2版)》https://www.bilibili.com/video/BV1se4y177g9/?share_source=copy_web&vd_source=ba41b960143ebcbcd0c22d5239b3e83c

1.表格总结

'w'

写入模式(write)

只能写入文件,如果文件存在则清空内容,不存在则创建新文件。

'a'

追加模式(append)

只能写入文件,如果文件存在则在末尾追加内容,不存在则创建新文件。

'r+'

读写模式(read and write)

可读可写,文件必须存在,写入时从文件开头覆盖原有内容。

上面这个表格大家只要了解即可实际上解决题库中的题可以只用到写入模式('w')!!!

十、64 传感器数据分析

64   传感器数据分析http://1.14.58.52/p/64

with open("sensor_data.in","r",encoding="utf-8") as fr,open("sensor_data.out","w",encoding="utf-8") as fw:
    for line in fr:
        line=line.replace("\n","")
        line=line.split() #生成列表
        if(float(line[4])>47.00):
            fw.write(line[1]+" "+line[4]+"\n")

参考链接:SWUST派森练习题:P64 传感器数据分析_2.下面是一个传感器采集数据文件sensor.txt的一部分: 2018-02-28 01:03:1-CSDN博客

10.1  for line in fr:

一次性读取:将文件的所有行读取到一个列表中,每个列表元素是一行内容
内存占用:会将整个文件内容加载到内存中,适合小文件。

10.2  line = line.replace('\n', '')

使用字符串的 replace() 方法,将行末的换行符 \n 替换为空字符串,即去除换行符。

十一、P127  信息脱敏

P127   信息脱敏http://1.14.58.52/p/P127

with open("./data.in",'r',encoding='utf-8') as fr,open("./data.out",'w',encoding='utf-8') as fw:
    for line in fr:
        if line[0]=='姓':
            fw.write('姓名:'+line[-2]+'**'+'\n')
        elif line[0]=='身':
            fw.write('身份证号:'+line[5:11]+'********'+line[-5:])
        elif line[0]=='手':
            fw.write('手机号:'+line[4:7]+'****'+line[11:])
        else:
            fw.write(line)

11.1关于文件操作题中的'\n'

这个一定要注意,文件操作题中的\n转义符也要占一个字符位置,相当于字符。所以line[-1]=='\n'!!!还有注意手机号只能填[11:]!!!

十二、P128 csv存json格式

P128   csv存json格式http://1.14.58.52/p/P128

import csv,json
with open('movie.in','r',encoding='utf-8') as fr,open('movie.out','w',encoding='utf-8') as fw:
    reader=csv.DictReader(fr)
    json.dump(list(reader), fw, indent=4, ensure_ascii=False)

家人们,这个题目我建议直接记住代码。。。毕竟时间紧迫,能省则省哈哈哈。

学习链接我放这里:【Python应用基础-第十一章 文件08 实战 CSV与JSON转换】 Python应用基础-第十一章 文件08 实战 CSV与JSON转换_哔哩哔哩_bilibili

12.1  csv.DictReader

.csv.DictReader 是 Python 内置 csv 模块提供的一个类,用来把 CSV 文件的每一行读成“字典”,而不是普通的字符串列表。

功能

csv.reader

csv.DictReader

每行类型

列表 ['Alice', '23', 'Beijing']

字典 {'name': 'Alice', ...}

读取字段

通过索引 row[0]

通过列名 row['name']

可读性

低(需记忆索引)

高(直接看列名)

12.2  json.dump()

.json.dump() 负责把 Python 对象→JSON 文本→写文件;掌握 indent、ensure_ascii 和 default 三大参数就能覆盖 90% 场景。

json.dump(obj, fp, *, skipkeys=False, ensure_ascii=True,

              check_circular=True, allow_nan=True, cls=None,

              indent=None, separators=None, default=None, sort_keys=False)

obj:要被序列化的 Python 对象。

fp:已打开的文件对象(必须有 .write() 方法)。

12.3  ensure_ascii=False

保留非 ASCII 字符(中文、emoji)原样,默认 True 会把中文变成 \uXXXX

12.4  indent=4

注意本题输出格式缩进为4

12.5  CSV,JSON相关总结

读 CSV → Python:用 csv.reader / csv.DictReader

读 JSON → Python:用 json.load / json.loads

写 CSV:用 csv.writer / csv.DictWriter

写 JSON:用 json.dump / json.dumps

方向不同,工具函数就不同,但思路都是“先把外部格式 → Python 内建对象 → 再转成目标格式”。

十三、P133 json格式转存csv文件

P133   json格式转存csv文件http://1.14.58.52/p/P133

#第一种写法,但是在派森中无法AC
import pandas as pd#因为派森没有pandas模块
import json
with open('movie_inf.in', encoding='utf-8') as f:
    data = json.load(f)      # data 是 list[dict]
df = pd.DataFrame(data)      # 一键变表格
df.to_csv('movie_inf.out', index=False, encoding='utf-8-sig')
#第二种写法
import json,csv
with open('movie_inf.in','r',encoding='utf-8')as fr:
    txt = json.load(fr)
with open('movie_inf.out','w',newline='',encoding='utf-8')as fw:
    writer=csv.DictWriter(fw,fieldnames=txt[0].keys())
    # 创建一个 CSV 写入器:
    # fieldnames=txt[0].keys():把第一条记录的所有键作为表头(列名)。
    # 要求 data 至少是 列表里套字典 且非空(前面已判断)。
    writer.writeheader() # 写入表头
    writer.writerows(txt)  # 一次性把所有字典按行写进 CSV。每行会自动按 fieldnames 的顺序取对应值,缺失的键会留空。

13.1  题干说明

题目中给出的代码作用:把 JSON 文件读进来,变成 Python 能直接用的字典或列表。

13.2  解题步骤

1️⃣先搞清楚 JSON 的形状

A 最外层是 列表,列表里每条记录都是 字典[{...}, {...}, ...]直接→CSV
B 最外层是 字典,真正数据在某一键下{"movies":[{...}, {...}]}先取 data["movies"] 再→CSV

2️⃣对症下药(大家可以直接跳到第三点,因为前两个派森不能用)

(1)列表套字典(最常见)

import pandas as pd

import json

with open('movie_inf.in', encoding='utf-8') as f:

       data = json.load(f)          # data 是 list[dict]

df = pd.DataFrame(data)          # 一键变表格

df.to_csv('movie_inf.csv', index=False, encoding='utf-8-sig')

(2)字典再包列表

import pandas as pd

import json

with open('movie_inf.in', encoding='utf-8') as f:

    wrapper = json.load(f)       # wrapper 是 dict

    records = wrapper['movies']  # 假设数据在 'movies' 键下

pd.DataFrame(records).to_csv('movie_inf.csv', index=False, encoding='utf-8-sig')

(3)派森中因为没有pandas模块,所以以上两种方法都不能用,只能用另一种方法

import json, csv
with open('movie_inf.in', encoding='utf-8') as fr:
    data = json.load(fr)
# 如果是 B 型,先解开 # data = data['movies']
if not data:        # 防止空文件
    exit()

with open('movie_inf.out', 'w', newline='',encoding='utf-8') as fw:
#在 Windows 上写 CSV 文件,务必加 newline='',防止出现一行空白一行内容
    writer = csv.DictWriter(fw, fieldnames=data[0].keys())
    #创建一个 CSV 写入器:
    #fieldnames=data[0].keys():把第一条记录的所有键作为表头(列名)。
    #要求 data 至少是 列表里套字典 且非空(前面已判断)。
    writer.writeheader()#写入表头
    writer.writerows(data)#一次性把所有字典按行写进 CSV。每行会自动按 fieldnames 的顺序取对应值,缺失的键会留空。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值