Python之文件操作

本文详细介绍了计算机文件的编码原理,包括UTF-8的使用,并阐述了Python中文件的读取、写入、追加操作,以及open函数、read()、write()和追加模式a的运用实例,帮助读者掌握文件操作的基础知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



目录

一     文件编码

二     文件的读取操作

三     文件的写入操作

四     文件的追加操作 


一     文件编码

我们知道计算机只能识别二进制的0与1,那么我们丰富的文本文件是如何被计算识别,并存储在计算机硬盘中的呢?

答案:使用编码技术(密码本)将内容翻译成0,1序列存入。  

编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何让将二进制翻译回可识别的内容。 

计算机有许多可用编码:
UTF-8

GBK

Big5

不同的编码,将内容翻译成二进制也是不同的。

UTF-8是目前全球通用的编码格式,除非有特殊需求,一律以UTF-8格式进行文件编码即可。

如图windows11记事本使用的就是UTF-8编码:

二     文件的读取操作

 什么是文件?

内存中存放的数据在计算机关机后就会消失。要长久保存数据,就要使用硬盘、光盘、U盘等设备。为了便于数据的管理和检索,引入了“文件”的概念。

一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。操作系统以文件为单位管理磁盘中的数据。―般来说,文件可分为文本文件、视频文件、音频文件、图像文件、可执行文件等多种类别。

在日常生活中,文件的操作主要包括:

        打开文件

        读写文件

        关闭文件

 1.打开文件

 在Python中,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下:

open(name,mode,encoding)

▣name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径 )

▣mode:设置打开文件的模式(访问模式):只读,只写,追加等。

▣encoding:编码格式(推荐使用UTF-8)

2.读取操作的相关方法

 read()方法

文件对象.read(num)

num表示要从文件中读取的数据长度(单位是字节),如果没有传入num,那么就表示读取文件中的所有数据。

readlines()方法

readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

readline()方法

 一次读取一行数据内容。

for循环读取文件 

 演示操作:


 

 

3.关闭文件

close().关闭对象文件

4.with open语法

        通过在with open的语句中对文件进行操作可以在操作完成后自动关闭close文件,避免遗忘掉close方法。

with open("D:/test.txt", "r", encoding="UTF-8") as f:
    for line in f:
        print(line)

总结 

 

三     文件的写入操作

 write()方法

write()方法可将任何字符串写入一个打开的文件。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。

write()方法不会在字符串的结尾添加换行符('\n'):

直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

当调用flush的时候,内容会真正的写入文件

这样做是避免频繁的操作硬盘,导致效率下降。

注意:
w模式,文件不存在,会创建新文件

w模式,文件存在,会清空原有内容

close()方法,带有flush()方法的功能。 

四     文件的追加操作 

文件的追加操作和写入 操作的方法是一样的,只不过在模式选择时,选择a模式。

案例演示:

 a模式,文件不存在,会创建新文件

a模式,文件存在,会在原有的内容后面继续写入。

可以使用“\n”来写换行符。

【文件综合案例】

对文本数据进行处理得到是员工的信息:
 

<think>好的,我现在需要解决用户的问题,即如何通过批处理(.bat)脚本来删除或清理HEX文件中多余的FF填充数据。首先,我要回忆一下之前用户提供的引用内容,看看有没有相关的信息。 用户提到使用Vector的HexView工具,并且引用[3]和[4]都涉及到使用HexView的命令行接口来处理HEX文件。特别是引用[4]中提到了剪切数据的功能,使用/CR参数来移除特定地址范围的数据。但用户现在的问题是要删除连续的FF填充数据,而不是某个固定地址范围的数据。所以可能需要更灵活的方法。 HexView工具是否有检测连续FF并删除的功能呢?我需要查阅一下HexView的文档或者用户提供的引用。引用[3]提到HexView支持增删改查HEX文件,并且有填充的功能。可能填充是用特定的值填充,但如何删除已有的填充呢? 用户之前的问题中,引用[4]中的/CR参数是剪切指定地址范围的数据,但需要知道具体的地址范围。如果FF填充分布在不同的地址段,可能需要先识别这些地址,然后逐一剪切。但手动指定每个地址范围不现实,尤其是当文件较大时。 或许可以结合HexView的其他功能,比如查找连续FF的区域,并生成对应的地址范围,再用/CR参数处理。不过,目前引用的内容中没有提到HexView是否有自动检测连续FF的功能。因此,可能需要编写一个脚本,先解析HEX文件,找到所有连续FF的地址范围,然后生成对应的HexView命令进行剪切。 不过,这样的脚本可能会比较复杂,需要解析HEX文件的格式,识别连续的FF数据块。可能超出了批处理脚本的能力范围,需要借助其他工具或者HexView自身的功能。 或者,是否有HexView的命令可以直接删除所有连续的FF数据?例如,使用某种替换功能,将连续超过一定长度的FF替换为空。但引用中并没有提到这样的功能,可能需要查看HexView的文档。 另一个思路是,如果这些FF填充位于文件的末尾或者特定的未使用区域,可以通过指定地址范围来删除。例如,假设从地址0x1000到0x1FFF都是FF,那么可以用/CR参数剪切这个范围。但用户的问题可能是指任意位置的连续FF,而不仅仅是特定区域。 在这种情况下,可能需要分步骤处理:首先使用HexView将HEX文件转换为二进制(BIN),然后用其他工具处理BIN文件,删除连续的FF,再转换回HEX。但用户希望用.bat脚本集成HexView,所以可能需要HexView本身的功能。 或者,用户提到的引用[5]中的签名和加密功能可能不相关,但引用[3]中的填充操作可能相关,例如,填充时可以用特定值填充,但如何删除已有的填充呢? 可能需要进一步分析HexView的命令行参数。根据引用[4],/CR参数可以剪切指定的地址范围,但需要知道这些地址范围。因此,解决方案可能需要先用HexView生成一个地址范围列表,然后逐一剪切。 或者,是否存在HexView的选项可以直接删除所有连续的FF数据?例如,使用类似“删除所有连续的FF超过N字节”的功能。如果HexView支持正则表达式或模式匹配,可能可以实现。但根据现有引用,没有明确提到这样的功能。 因此,可能的步骤是: 1. 使用HexView将HEX文件转换为二进制(BIN)文件。 2. 使用其他工具或自定义脚本处理BIN文件,识别并删除连续的FF数据块。 3. 将处理后的BIN文件转换回HEX格式。 但用户希望全部通过批处理脚本和HexView完成,可能需要HexView本身支持这样的操作。假设HexView没有直接支持,可能需要结合其他工具,如使用Python或PowerShell脚本处理BIN文件,再在.bat中调用这些脚本。 不过,用户明确要求使用.bat脚本,所以可能需要寻找纯HexView的方法。或者,是否有HexView的命令可以逐段检查并删除连续的FF? 另一个可能的方法是使用HexView的填充功能,将特定的地址范围填充为空白(即删除),但需要先确定哪些地址范围是连续的FF。这又回到了如何确定这些地址的问题。 总结来说,可能的解决方案步骤: 1. 解析原始HEX文件,找到所有连续FF的地址范围。 2. 生成对应的HexView命令,使用/CR参数剪切这些地址范围。 3. 执行HexView命令处理HEX文件。 但如何解析HEX文件并找到连续FF的地址范围呢?这可能需要编写额外的脚本,或者使用HexView本身的某些功能。例如,HexView是否有导出数据为某个格式,可以分析数据内容? 如果没有,可能需要分两步: a. 使用HexView的导出功能将HEX文件转换为二进制BIN文件。 b. 分析BIN文件,找到所有连续FF的区域的起始和结束地址。 c. 将这些地址范围作为参数传递给HexView的/CR命令,剪切这些区域。 但这个过程需要额外的工具来分析BIN文件,可能超出了批处理脚本的能力,需要借助其他编程语言如Python。不过用户可能希望仅使用批处理和HexView。 如果HexView可以输出文件的地址范围和数据,可能可以编写一个批处理脚本来处理输出,识别连续FF的区域。例如,HexView是否有命令可以按地址输出数据,然后批处理脚本逐行分析,记录连续FF的起始和结束地址。 不过,这可能比较复杂,尤其是处理大文件时。此外,批处理脚本处理二进制数据可能不太方便,可能需要HexView提供某种文本格式的输出。 另一种可能:HexView的某个命令可以直接删除所有连续的FF数据。例如,使用替换命令将连续的FF替换为空,但需要确保替换操作不会破坏文件结构。但根据现有引用,没有提到这样的功能。 综上所述,最可行的办法可能是结合HexView的剪切命令和外部脚本分析HEX文件,生成需要剪切的地址范围列表,然后在批处理脚本中调用HexView进行处理。 不过,由于用户可能没有其他工具,只能使用HexView和批处理脚本,可能需要另一种方式。例如,如果HexView支持脚本输入,可以编写一个HexView脚本文件,其中包含多个/CR命令来剪切所有连续FF的区域。 因此,最终的步骤可能如下: 1. 使用HexView将HEX文件转换为二进制(BIN)文件。 2. 使用自定义脚本(如Python)分析BIN文件,找出所有连续FF的地址范围。 3. 生成一个包含多个/CR参数的HexView命令,剪切这些地址范围。 4. 执行HexView命令处理原始HEX文件,生成清理后的HEX文件。 但用户可能希望整个过程在.bat中完成,无需其他脚本语言。这时候,可能需要寻找HexView自身的功能来识别这些区域,或者接受手动指定地址范围。 如果用户知道需要删除的地址范围,可以直接在批处理脚本中使用HexView的/CR参数。例如: ``` hexview.exe /CR:0x1000-0x1FFF input.hex output.hex ``` 但如果不知道具体地址,就需要自动化识别。这时候可能需要结合其他工具,或者HexView的某些高级功能。 假设用户无法使用其他工具,只能使用HexView和批处理脚本,可能的解决方案是: - 编写一个批处理脚本,调用HexView多次,每次处理一个地址范围,但这些地址范围需要提前确定。 因此,可能无法完全自动化,除非HexView有某种检测功能。 经过上述思考,可能的结论是:使用HexView的剪切命令,但需要知道具体的地址范围。如果用户无法提供这些地址范围,就需要其他工具辅助分析HEX文件,找到连续FF的区域,然后生成对应的HexView命令。 因此,在回答中需要说明这个步骤,并给出示例脚本,结合HexView和可能的其他工具(如PowerShell或Python)来识别地址范围,然后调用HexView进行处理。如果用户只能使用HexView和批处理,可能需要手动处理,或者建议使用HexView的其他功能。</think>通过Vector HexView工具的命令行功能,可以使用以下步骤实现HEX文件连续FF数据的清理: 1. **识别有效数据范围** 使用HexView的地址范围分析功能,结合/CR剪切参数清理无效区域。假设有效数据范围为0x1000-0x7FFF,其余区域为FF填充: ```bat hexview.exe input.hex /CR:0x0-0xFFF /CR:0x8000-0xFFFF /OUT:output.hex ``` 2. **动态检测填充区域(需自定义逻辑)** 若需自动化检测连续FF区域,需编写辅助脚本生成地址范围列表。例如使用Python解析HEX文件后生成批处理命令: ```python # find_ff_ranges.py 示例代码 with open("input.hex", "rb") as f: data = f.read() # 检测连续FF的逻辑(伪代码) ranges = detect_ff_ranges(data) with open("cut_commands.bat", "w") as bat: bat.write("hexview.exe input.hex " + " ".join([f"/CR:{r}" for r in ranges]) + " /OUT:output.hex") ``` 3. **集成到批处理脚本** 将上述逻辑封装为可执行流程: ```bat @echo off :: Step1: 转换HEX为BIN以便分析 hexview.exe input.hex /BIN:temp.bin :: Step2: 调用Python脚本检测连续FF区域 python find_ff_ranges.py :: Step3: 执行生成的剪切命令 call cut_commands.bat :: 清理临时文件 del temp.bin ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值