python cookbook 学习笔记 第五章 文件与IO (1)读写文本数据

本文详细介绍如何使用Python的open()函数读写不同编码(如ASCII, UTF-8, UTF-16)的文本文件,包括如何指定编码、处理编码错误及跨平台换行符的统一管理。
  • 读写文本数据
  • 问题:
    • 需要读写各种不同编码的文本数据,比如ASCII, UTF-8, UTF-16编码等。
  • 解决方案:
    • 使用带有rt模式的 open()函数读取文本文件:
with open("somefile.txt", "rt") as f:
    data = f.read()

with open("somefile.txt", "rt") as f:
    for line in f:
        pass
  • 类似,为了写入一个文本文件,使用带有 wt 模式的open()函数,如果之前文件内容存在,则清空并覆盖:
with open("somefile.txt", "wt") as f:
    f.write("text1")
    f.write("text2")
  • 如果是在已存在文件中添加内容,使用模式为 at 的 open()函数。
  • 文件的读写操作默认使用系统编码,可以通过 sys.getdefaultencoding()来得到。在大多数机器上都是utf-8 编码。如果已经知道要读写的文本是其他编码方式,可以通过传递一个可选的 encoding 参数给open()函数:
with open(r"E:\test\python进阶\Python_cookbook_第四章\Python_cookbook_第四章(1).py",
          encoding= "latin-1") as f:
    for line in f:
        print(line, end="")
  • latin-1 编码永远不会产生解码错误(中文是乱码,但是不报错),但是也许不能完全正确的文本解码数据,但是它能 从中提取足够多的有用数据,如果之后想将数据写回去,原先的数据还是会保留的。

  • 讨论: 读写文件要注意几点:首先,在例子程序中的 with 语句给被使用的文件一个上下文环境,但 with 控制块 结束的时,文件会自动关闭。也可以不使用 with 语句,但是必须手动关闭文件:
    f = open(“somefile.txt”, “rt”)
    data = f.read()
    f.close()

  • 另外一个问题是关于换行符的标识问题,在 Unix 和 windows 中是不一样的(分别是n和rn).默认情况下,Python 会以统一模式处理换行符。这种模式下,在读取文本的时候,Python 可以识别所有的普通换行符并将其转换成单个\n 字符。类似的,在输出时会将换行符\n转换为系统默认的换行符。如果不希望这种默认的处理方式,可以给open()函数 传入参数 newline= “”,就像下面这样:

with open("somefile.txt", "rt", newline= "") as f:
    pass
  • 下面是读取 windows 上面的文本文件:
f = open("hello.txt", "rt")
f.read()  # "hello world!\n"

g = open("hello.txt", "rt", newline= "")
g.read()  # "hello world!\r\n"
  • 最后一个问题就是文本文件中可能出现的编码错误。读取或写入一个文本文件时,可能回遇到一个编码或者解码错误,比如:
f = open("sample.txt", "rt", encoding= utf-8)
f.read()
# UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
  • 如果出现这个错误,通常表示读取的文本指定的编码不正确。在检查编码后,如果还是存在错误的话,可以给open()函数 传递一个可选的 errors 参数来处理这些错误:
f = open("sample.txt", "rt", encoding= "ascii", errors= "replace")
f.read()
f = open("sample.txt", "rt", encoding="ascii", errors= "ignore")
f.read()
  • 对于文本处理的首要原则是编码正确。通常 web 应用的编码都是 utf-8(默认值)
内容概要:本文围绕微电网群的双层优化分布式优化问题,提出基于交替方向乘子法(ADMM)的分布式协同优化控制策略,并通过Matlab代码实现仿真验证。研究构建了上层为微电网间能量协调优化调度、下层为各微电网内部源-荷-储精细化运行管理的双层优化模型。采用ADMM算法将集中式优化问题分解为多个可并行求解的子问题,实现了计算的分布式化信息隐私保护,显著提升了系统的可扩展性鲁棒性。文中系统阐述了模型构建原理、ADMM算法设计流程及其收敛性分析,并通过仿真实验验证了该方法在降低系统综合运行成本、提高可再生能源消纳能力以及维持系统稳定运行方面的有效性。; 适合人群:具备电力系统分析、优化理论基础,熟悉Matlab编程,从事微电网、分布式能源系统、智能电网等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 学习和掌握基于ADMM的分布式优化方法在微电网群协同能量管理中的具体应用;② 实现微电网群多主体参下的经济调度仿真分析;③ 深入理解双层优化架构的设计理念分布式求解算法的实现机制。; 阅读建议:建议结合所提供的Matlab代码进行动手实践,重点剖析模型建立算法实现的关键细节,可通过调整系统参数、改变运行场景等方式,深入探究ADMM算法的收敛特性及其对优化效果的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值