第八篇:Files

深入理解小数二进制表示与IEEE 754浮点数精度陷阱 在计算机科学中,数据的二进制表示是信息处理的基础。计算机通过将连续的小数离散化为有限的二进制位进行近似存储,其核心原理是加权位值法,类似于十进制的科学计数法。这种表示方法直接决定了浮点数运算的精度和范围,是理解数值计算稳定性的关键技术。在工程实践中,浮点数精度问题广泛存在于金融计算、科学模拟和嵌入式系统等场景。例如,使用BigDecimal进行高精度金融计算,或利用十六进制浮点数转换工具进行底层调试,都是应对精度挑战的常见手段。本文聚焦于小数的二进制转换机制与IEEE 754标准,解析了从基础概念到实际开发 阅读详情

File类型是python内置类型。使用内置函数open可以得到一个file object.

 

1.常用的file操作清单:

 

2.open files

打开文件:

打开文件,需要制定操作模式。默认模式是只读的。

模式'r', 表示打开文件并读里面内容

模式‘w',表示创建或打开文件,向文件里面写内容。(注意会覆盖原有内容)

模式’a',表示'a'打开并在文件末尾附加内容。

符号’b',加一个b,表示允许二进制数据

符号‘+’,加一个‘+’号,表示既可以读也可以写。

 

读写内容:

所有往python中写的内容都必须是string类型。

在使用读写操作时,使用整行读写将比一般读写要快很多。建议使用。

所有读到的数据都是string类型。所以即使存储的时int类型,读出来也是string类型了。如果要使用int类型。则需强制转换。

 

关闭文件:

使用close()函数关闭文件,但是这不是必须的。当file object没有被引用时,系统进行清理时会自动关闭它。当然使用close()是一个好的习惯。

 

3.文件操作举例

读操作:

>>> myfile = open('F:/Project/python/testfile.txt', 'r')
>>> myfile.readline()
'Hello, My name is testfile.\n'
>>> myfile.readline()
'Happy to see you!'
>>> myfile.readline()
''
>>> myfile.read()
''
>>> myfile.seek(0)
>>> myfile.read()
'Hello, My name is testfile.\nHappy to see you!'
>>> myfile.c
>>> myfile.close()

 

写操作:

>>> myfile = open('F:/Project/python/testfile.txt', 'w')
>>> myfile.writelines('hello')
>>> myfile.writelines('testfile')
>>> myfile.read()
>>> myfile.close()
>>> myfile = open('F:/Project/python/testfile.txt', 'r')
>>> myfile.read()
'hellotestfile'
>>> myfile.close()

 

4.保存object---pickle函数

之前讲过eval。但是这个函数太强大,给它足够的权限,甚至可以删除你系统里所有的文件。所以对于不确定是否安全的文件,想把它记录的东西加载进来,可以使用pickle函数。

比如,下面是保存字典的例子:

>>> D = {'a':1, 'b':2}
>>> myfile = open('F:/Project/python/testfile.txt', 'wb')
>>> import pickle
>>> pickle.dump(D, myfile)
>>> myfile.close()

从文件中将object读到内存里:

>>> myfile = open('F:/Project/python/testfile.txt', 'rb')
>>> E = pickle.load(myfile)
>>> E
{'a': 1, 'b': 2}

 

可以在文件中存储多个object,然后通过pickle一一读出。

>>> pickle.load(myfile)
[1, 2, 3]
>>> pickle.load(myfile)
{'a': 1, 'b': 2}
>>> pickle.load(myfile)
{'a': 1, 'b': 2}
>>> pickle.load(myfile)

Traceback (most recent call last):
  File "<pyshell#87>", line 1, in <module>
    pickle.load(myfile)
  File "C:\Python27\lib\pickle.py", line 1378, in load
    return Unpickler(file).load()
  File "C:\Python27\lib\pickle.py", line 858, in load
    dispatch[key](self)
  File "C:\Python27\lib\pickle.py", line 880, in load_eof
    raise EOFError
EOFError
>>> 


与pickle相关的还有shelve函数。有兴趣可以去了解。这边不再介绍。

5.打包二进制数据

用‘wb'模式打开数据后,可以使用pack函数打包变量。

下面代码里的'>i4sh'告诉pack函数,pack的是4字节的整数,4个字符和2字节的整数。

>>> myfile = open('F:/Project/python/testfile.txt', 'wb')
>>> import struct
>>> data = struct.pack('>i4sh', 7, 'spam', 8)
>>> data
'\x00\x00\x00\x07spam\x00\x08'
>>> myfile.write(data)
>>> myfile.close()
>>> 
>>> myfile = open('F:/Project/python/testfile.txt', 'rb')
>>> data = myfile.read()
>>> values = struct.unpack('>i4sh', data)
>>> values
(7, 'spam', 8)

由于打包二进制操作偏向底层,这里也不展开讲,有兴趣可以查阅官方文档。

 

6.文件上下文管理

这方面涉及很多没有讲过的知识,以后章节会讲解到。

 

end.

 

 

 

 

 

 

 

 

深入解析小数进制转换:从0.1+0.2≠0.3到浮点数精度控制 计算机内部使用二进制表示数字,而人类习惯的十进制小数在转换为二进制时,常因无法精确表示而产生无限循环,这是浮点数精度问题的根源。理解其转换原理,关键在于掌握‘加权求和’模型和‘除积法’操作。这种底层机制直接关系到数值计算的精确性,在金融系统、嵌入式开发、科学计算等场景中至关重要。例如,IEEE 754浮点数标准通过有限的尾数位存储近似值,导致了经典的‘0.1+0.2’精度误差问题。在实际工程中,开发者需通过选择合适的数据类型(如定点数、高精度库)、避免直接比较浮点数相等、调整计算顺序等策略来控制误差。本文以 阅读详情

相关推荐

Java高精度圆周率计算:从莱布尼茨级数到Machin公式实现

数值计算是计算机科学处理连续数学问题的核心技术,其核心原理是通过离散算法逼近连续函数值。在工程实践中,高精度计算需要突破浮点数精度限制,BigDecimal类为此提供了任意精度十进制运算能力。这种技术对科学计算、密码学及金融建模等领域具有重要价值,能够确保复杂运算结果的准确性。本文以圆周率计算为具体应用场景,通过对比莱布尼茨级数和Machin公式两种算法,深入解析高精度数值计算的实现方法,并探讨了级数收敛性和计算精度控制等关键问题。

weixin_30765577的博客 616

python之File文件(初学者教程)

file = open('../Stu_pack/Dream It Possible.txt','rt',encoding = 'utf-8') #用相对路径打开指定的文件,并创建文件对象。im.save('C:\\Users\\Administrator\\Desktop\\重返未来1999维尔汀\\demo\\Love_Star.PNG')file.write(str(line) +'\t'+'维尔汀重返未来1999'+'\n')如. txt./.py/.html/.csv/.xls/.xlsx。

verity709804082的博客 658

4、数值表示方法详解

本文详细介绍了计算机编程中常见的数值表示方法,包括类型转换与范围检查、饱和处理、二进制编码十进制(BCD)、定点表示、缩放数值格式以及有理数表示。每种方法的特点、适用场景及优缺点进行了系统性分析,并结合实际应用案例(如音频处理和金融计算)说明其具体使用方式。旨在帮助开发者根据实际需求选择合适的数值表示方法,以平衡精度、效率和存储等方面的需求。

threejs5artist的博客 57

Python中File文件

打开文件后需要及时关闭。图为万疆歌词的一部分。

2301_79702837的博客 373

4、计算机数值表示与二进制运算全解析

本文详细解析了计算机中常见的数值表示方法,包括整数的饱和处理、二进制编码十进制(BCD)表示、定点表示、缩放数值格式以及有理数表示,并深入讲解了二进制的加减乘除运算规则。文章通过对比不同表示方法的优缺点,结合实际应用场景,帮助程序员根据具体需求选择合适的数值表示方式和运算策略,以提升程序的性能和准确性。

l3m4n的博客 66

计算:第一部分 计算的诞生 第 2 章 计算之术 数系的扩张

1. 背景介绍 在计算机科学的发展历程中,数学一直是一个重要的基础。数学的发展也推动了计算机科学的进步。在本章中,我们将探讨数系的扩张,这是计算机科学中一个重要的概念。 2. 核心概念与联系 数系的扩张是指在一个数系中添加新的元素,以扩展该数系的范围。例如,我们可以在整数集合中添加分数,从

AI天才研究院 439

python常用函数分类整理

python 文件操作 python:目录与文件操作os.listdir(dirname):列出dirname下的目录和文件os.getcwd():获得当前工作目录os.curdir:返回但前目录('.')os.chdir(dirname):改变工作目录到dirname os.path.isdir(name):判断name是不是一个目录,name不是目录就返回falseos.path....

weixin_33691817的博客 223

C#与Vector XL驱动库实战:CAN通道配置与端口访问详解

本文详细解析了使用C#调用Vector XL驱动库进行CAN总线通信开发的核心步骤。重点阐述了如何通过XL_GetDriverConfig获取硬件通道信息,并厘清channelMask与accessMask的区别与转换关系,最终指导开发者正确使用XL_OpenPort函数配置并打开CAN端口,为构建稳定的汽车电子测试与诊断应用奠定基础。

weixin_28452161的博客 362

(原创)Python文件与文件系统系列(1)—— file 对象

  本系列将从四个部分简单介绍Python对文件系统的操作与支持:   1. Python内置的 file 对象   2. Python的os模块对文件、文件系统操作的支持   3. Python的os.path模块对文件系统操作的支持   4. Python对文件描述字操作的支持   5. Python的stat模块   此外,Python中还有支持临时文件、目录的tempfile模...

weixin_34023863的博客 330

VMware Converter 6.2.0保姆级教程:从物理机到ESXi主机的完整迁移指南(含常见错误排查)

本文提供VMware Converter 6.2.0从物理机迁移至ESXi主机的完整保姆级教程。详细解析了迁移前的环境规划、核心转换过程步骤、版本差异对比,并重点针对代理安装失败、任务卡顿、虚拟机无法启动等常见错误提供了实战排查与解决方案,确保P2V迁移顺利进行。

sam99的博客 380

第33次CCF-CSP认证考试 第一题 词频统计 满分题解

本人小白一枚,抱着学习的态度想到网上找一些csp的参考答案,但由于实力有限,大佬的代码大都看不太懂,于是萌生了想用一些简单,基础的语句完成csp前两题的想法并公开,以便与像我这样实力不强的同学交流学习,如有更好的建议,还请斧正,感谢!

qq_75242106的博客 1869

Python的几种文件类型

Python的几种文件类型 Python有以下几种类型的文件: py:Python控制台程序的源代码文件 pyw:Python带用户界面的源代码文件 pyx:Python包源文件 pyc:Python字节码文件 pyo:Python优化后的字节码文件 pyd:Python的库文件(Python版DLL)、在Linux上是so文件 pyc和pyo的生成方法 pyc的作用是用来跨平台使...

answer3lin的博客 1万+

告别Visual Studio!用MSYS2+GCC+CMake在Windows上打造Linux式C++开发环境(保姆级避坑)

本文详细介绍了如何在Windows上使用MSYS2+GCC+CMake搭建Linux式C++开发环境,替代Visual Studio。从MSYS2的安装配置、MinGW-w64 GCC工具链的部署,到CMake项目的创建与构建,提供了保姆级教程和常见问题解决方案,帮助开发者高效过渡到命令行开发模式。

weixin_30298497的博客 325

Ruby中的Numeric类型陷阱:浮点数计算不准确如何破?

解决Ruby浮点数计算精度问题,深入解析Numeric类型陷阱。结合Ruby数据类型详解,揭示Float与BigDecimal适用场景,掌握高精度计算核心方法。避免常见错误,提升程序可靠性,值得收藏。

FuncIsle的博客 907

别再手动巡检了!用Zabbix 5.0 + SNMPv2自动监控华为S系列交换机(附完整命令集)

本文详细介绍了如何利用Zabbix 5.0与SNMPv2实现华为S系列交换机的自动化监控,告别低效的手动巡检。通过配置SNMPv2c安全基线、核心功能启用及Zabbix Server端深度配置,构建7×24小时监控体系,实时预警接口状态、流量波动等关键指标,大幅提升运维效率与故障响应速度。

weixin_30940783的博客 629

SPSS线性混合模型实战:手把手复现一篇老年认知研究的统计结果(含代码)

本文详细介绍了如何使用SPSS线性混合效应模型复现老年认知研究的统计结果,涵盖数据准备、模型构建、结果解读及可视化全流程。特别针对重复测量数据分析,提供了SPSS菜单操作与语法编写的实用技巧,帮助研究者高效处理复杂数据并验证模型假设。

weixin_42562079的博客 517

为什么不能使用"=="运算符判断两个浮点数是否相等

在大多数编程语言中,使用"=="运算符判断两个浮点数是否相等的结果都是难以确定的,并且几乎总是无意义的,在编程实践中应该完全禁止使用"=="运算符去判断两个浮点数是否相等。 一个问题及其分析 如若不信,可以先试着运行下面这段js代码,看看它的输出结果: console.log(0.1 + 1 - 1 == 0.1); 在Chrome Console中,上...

weixin_33774308的博客 2848

Android双目摄像头(RGB+IR)实时预览与人脸活体检测实战指南

本文详细介绍了Android双目摄像头(RGB+IR)实时预览与人脸活体检测的实战指南。通过双摄同步预览、人脸检测与活体判断等技术实现,提升安全认证的准确性和鲁棒性。文章还提供了开发环境搭建、常见问题解决方案及性能优化建议,帮助开发者快速掌握双目摄像头在Android平台的应用。

vulkan6gpu的博客 691

从零学习单、双精度浮点数

指数表示小数点的位置,基数表示小数点左侧的数字。双精度浮点数的计算方式与单精度浮点数类似,都是采用科学计数法进行计算,即把一个数表示成的形式,其中是尾数(mantissa),是指数(exponent)。双精度浮点数(double)是计算机使用的一种数据类型,占用64位(8字节),可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大是:-1.79E+308~+1.79E+308。与单精度浮点数相比,双精度浮点数占用更多的存储空间(通常为 64 位),因此能够提供更高的精度和更大的表示范围。

holdcloud的博客 4938

STM32G0/G4无刷电机硬件设计与FOC控制实现

无刷直流电机(BLDC)和永磁同步电机(PMSM)的矢量控制依赖于高精度电流采样、实时SVPWM调制与闭环PI调节等核心技术。其底层实现需兼顾电机本体建模、坐标变换(Clark/Park)、死区补偿及硬件资源约束。STM32G0系列凭借CORDIC协处理器与超低功耗特性,适用于成本敏感型有感FOC应用;而STM32G4集成运放、FMAC滤波器与高级定时器,可支撑高性能无感控制与多源传感融合。该技术广泛应用于机器人关节、智能云台、伺服驱动等场景,是嵌入式电机控制工程师必须掌握的工程化落地能力。

weixin_35751412的博客 121

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Zotero Style 护眼阅读设置:3个颜色参数调出文献列表护眼色

> Meta 描述:Zotero Style 是一款可自定义 Zotero 阅读进度、列颜色与 PDF 标注颜色的插件。本文拆解护眼设置涉及的三个核心参数及默认值,帮你把文献列表调成低刺激配色。 连续处理十几篇 PDF 文献的夜晚,Zotero 里最刺激眼睛的往往不是 PDF 本身,而是左侧列表:标题栏、标签色块、进度条全部以满强度渲染。Zotero Style 是一款 Zotero 个性化插件

gitblog_00476的博客 442

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

为什么 0.1 + 0.2 != 0.3?Python 浮点数比较的精度陷阱与完全避坑指南

Python中浮点数精度问题的核心在于二进制无法精确表示某些十进制小数(如0.1),导致运算结果存在微小误差。常见陷阱包括直接比较、累积误差和金融计算错误。解决方案包括: 使用math.isclose()进行容差比较 Decimal模块处理精确十进制运算 转换为整数计算(如货币以分为单位) 使用Fraction进行有理数运算 math.fsum()减少累加误差 不同场景应选择合适方案:科学计算可用容差比较,金融系统推荐Decimal或整数计算,数学推导适合Fraction。特别注意避免float与Decim

深山技术宅的博客 802

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

《Python科学计算基础教程》 -- 读书笔记

文章目录 Python科学计算基础教程 代码路径 http://www.github.com/sundaygeek/MasteringPythonScirntificComputing 第1章 科学计算概况与选择Python的理由  1 1.1 科学计算的定义  2 1.2 科学计算的简单处理流程  3 1.3 科学与工程领域的案例  5 1.4 解决复杂问题的策略  5 1.5 近似、误差及相...

sundaygeek的专栏 2757

【Ruby高效编程必修课】:3步精准判断数据类型避免运行时错误

掌握Ruby数据类型判断技巧,避免运行时错误。本文深入解析Ruby数据类型详解,涵盖Class、is_a?、kind_of?等核心方法,适用于变量校验与安全编程,提升代码健壮性。实用指南值得收藏。

AlgoFun的博客 646

Python数学类模块实战指南:从math到decimal的选型与避坑

在数值计算和数据处理中,浮点数的二进制近似表示常导致精度损失,例如0.1+0.2不等于0.3。理解这一原理,是合理选型Python标准库数学模块的基础。math提供实数域的高速数学函数,cmath处理复数运算,random用于伪随机模拟,statistics负责统计描述,decimal实现十进制精确计算,fractions则以有理数运算彻底消除误差。根据数据对象、精度需求和性能要求选择合适模块,能让代码在金融记账、量化回测、抽奖模拟等真实场景中兼具准确性和可读性。本文围绕六大数学类模块的定位、高频函数与典型

weixin_31102231的博客 45

《3D数学基础》提炼总结(一)3D数学和笛卡尔坐标系

写在前面,想学好图形学,数学是必不可少的,市面上想找一本书既包括数学知识又与图形学和编程连续紧密的,这本书算是名气较大的,再加上很多语言比较通俗幽默,读起来不那么想睡觉,所以就是它啦(#^.^#)。当然这里总结的稍微精炼一点,很多原著的东西都没有,毕竟原著388页,而我呢,说不定总结出来的不到200页,哈哈。 一、简介 1.什么是3D数学 3D数学是一门和计算几何相关的学科,计算几何则是研究...

qq_39218906的博客 1321
上一篇: 金刚经 原文及受持要领
下一篇: 第九篇:其它类型相关知识
未雨
博客等级 码龄14年 4粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值