鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: molinchz

[已解决]python 读写文件和生成文件怎样操作

[复制链接]
 楼主| 发表于 2021-11-2 20:20:31 | 显示全部楼层
hrpzcf 发表于 2021-10-31 16:36
知道转换规律就不难,不知道转换规律,不管是不是中文都麻烦

大佬,图1 是ascii 码,然后写入是把ascii转成16进制  写成的hex文件 , 是这样吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-2 21:45:41 | 显示全部楼层
molinchz 发表于 2021-11-2 20:20
大佬,图1 是ascii 码,然后写入是把ascii转成16进制  写成的hex文件 , 是这样吗

不是。没有所谓的hex文件,只有文本文件和二进制文件(实际上这两者本质也是一样)。生成二进制文件,原理就是以二进制写(wb覆盖,ab追加)的方式新建文件,然后把字节码写入到文件中。字节码哪来呢,按照前几楼的例子,就是把字符串先按某编码格式(比如ASCII)编码成字节码,再按你的规则对字节码进行修改(比如在前面增加两个字节01 00,后面以00字节补够16字节),这就是要写入二进制文件的字节码。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 17:12:13 | 显示全部楼层
hrpzcf 发表于 2021-11-2 21:45
不是。没有所谓的hex文件,只有文本文件和二进制文件(实际上这两者本质也是一样)。生成二进制文件,原理 ...

谢谢老师,我又来了,
lc_path=D:\PycharmProjects
for com_num in range(393000, 393002, 1):
    with open(f"lc_path '+' {com_num}.cis", "wb") as cisf:

这个路径怎样指定 ,我一直拼不对!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-12 18:09:57 | 显示全部楼层
molinchz 发表于 2021-11-12 17:12
谢谢老师,我又来了,
lc_path=D:\PycharmProjects
for com_num in range(393000, 393002, 1):
import os

lc_path = r"D:\PycharmProjects"
# 假设你想拼接成这样:"D:\PycharmProjects\393001.cis"
# 首先文件名是 f"{com_num}.cis"
# 然后再用 os.path.join 将其与 lc_path 组合成路径:os.path.join(lc_path, f"{com_num}.cis")
# 当然你也可以这样:rf"{lc_path}\{com_num}.cis",但为了保证不同平台兼容性建议用上面方法
for com_num in range(393000, 393002, 1):
    # print(rf"{lc_path}\{com_num}.cis")
    print(os.path.join(lc_path, f"{com_num}.cis"))
    # with open(f"lc_path '+' {com_num}.cis", "wb") as cisf:
    #     pass
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 18:19:22 | 显示全部楼层

老师,这个lc_path  是接收地址的一个变量,能用加 r  这样写吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-12 18:24:53 | 显示全部楼层
本帖最后由 molinchz 于 2021-11-12 18:27 编辑

,我查到open  os.path.join(lc_path, f"{com_num}.cis")  这个可以  刚才试错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-14 13:15:17 | 显示全部楼层

请教下老师,我用hex(4565)  ,得到 16进制  11d5    ,但存放的是  d5  11,  也就是高低位交换了,而且python 里面比如  hex(2016 ) 得到是0x7e0  ,高位的07  转成7了  ,这样的,存放到 .cis 文件 中0x7 还能 是07吗?要补码操作吗,高低位交换是分离在合成 ,怎样实现。谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-14 14:02:51 | 显示全部楼层
molinchz 发表于 2021-11-14 13:15
请教下老师,我用hex(4565)  ,得到 16进制  11d5    ,但存放的是  d5  11,  也就是高低位交换了,而且py ...
molinchz 发表于 2021-11-14 13:15
请教下老师,我用hex(4565)  ,得到 16进制  11d5    ,但存放的是  d5  11,  也就是高低位交换了,而且py ...

>>> n = 4565
>>> x = b"\xd5\x11"
>>> b = b"\x11\xd5"
>>> n.to_bytes(2, "big")
b'\x11\xd5'
>>> n.to_bytes(2, "little")
b'\xd5\x11'
>>> int.from_bytes(x, "little")
4565
>>> int.from_bytes(b, "big")
4565
>>> (2016).to_bytes(2, "big")
b'\x07\xe0'
>>>
以上就是整数、字节码分别以大小端转换的过程(用struct模块也可以),你的具体需求还是开个新贴把用例和想要的结果写清楚吧,论坛上好多大神会帮你的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-14 14:50:50 | 显示全部楼层
又没看到回复
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 21:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表