鱼C论坛

 找回密码
 立即注册
查看: 2809|回复: 28

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

[复制链接]
发表于 2021-10-31 10:43:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请教 下大佬,python 中怎样写和生成这样的文件,编码 是AscII 。
QQ截图20211031104019.png QQ图片20211031103726.png
最佳答案
2021-10-31 16:12:52
molinchz 发表于 2021-10-31 16:01
大佬,6字开头,最前面 一字节 是01  ,其它是00
sl = ["688700", "300012", "003300", "603812"]

prefix0 = bytes((0, 0))
prefix1 = bytes((1, 0))
with open("xx.cis", "ab") as cisf:
    for string in sl:
        if string.startswith("6"):
            prefix = prefix1
        else:
            prefix = prefix0
        bytel = prefix + bytes(string, "utf-8")
        bl_length = len(bytel)
        if bl_length < 16:
            bytel += bytes(16 - bl_length)
        cisf.write(bytel)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-10-31 11:03:30 | 显示全部楼层
左侧的不是ascii编码,只能说是数据的16进制字节。真正的编码要看文件头。
右侧是文本读取器尝试解析后显示的结果,看起来有中文,应该不是ASCII。
你想实现什么效果,详细说一下。另外把文件发出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 11:38:54 | 显示全部楼层
suchocolate 发表于 2021-10-31 11:03
左侧的不是ascii编码,只能说是数据的16进制字节。真正的编码要看文件头。
右侧是文本读取器尝试解析后显 ...

大神,软件 生成的文件 是这样在附件里,左侧是16进制的编码,是把右侧的Unicode编码字符转换为ANSI编码字符,然后生成的文件 。


lc.rar (1.2 KB, 下载次数: 7)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 11:42:23 | 显示全部楼层
suchocolate 发表于 2021-10-31 11:03
左侧的不是ascii编码,只能说是数据的16进制字节。真正的编码要看文件头。
右侧是文本读取器尝试解析后显 ...


我这意图是想把  688551   变成文件中的01 00 36 38 35 35 31 00 00 00 00 00 00 00 00  00 这样存放  。这样来用软件创建这二个文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 12:10:53 From FishC Mobile | 显示全部楼层
本帖最后由 hrpzcf 于 2021-10-31 12:15 编辑

就是把文件的每个字节值都转成十六进制字符形式呗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 12:26:45 | 显示全部楼层
hrpzcf 发表于 2021-10-31 12:10
就是把文件的每个字节值都转成十六进制字符形式呗?

是的,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 12:44:55 | 显示全部楼层

老师,文件 生成的是16进制的, 也是还要补位00 ,不然软件 是读不到的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 12:49:43 From FishC Mobile | 显示全部楼层
molinchz 发表于 2021-10-31 12:44
老师,文件 生成的是16进制的, 也是还要补位00 ,不然软件 是读不到的

唉,回复几个都被审核
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 12:54:00 | 显示全部楼层
hrpzcf 发表于 2021-10-31 12:49
唉,回复几个都被审核

我都 看不到哦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 13:45:54 | 显示全部楼层

这个文件 生成的就没有补位
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 13:49:11 | 显示全部楼层
请老师帮忙看下先创建生成这个*.cis文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 14:01:37 From FishC Mobile | 显示全部楼层
molinchz 发表于 2021-10-31 13:49
请老师帮忙看下先创建生成这个*.cis文件

你是想要生成二进制文件啊,我还以为是要读取二进制文件显示出来,那生成文件是依据哪个文件的数据呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 14:07:19 | 显示全部楼层
hrpzcf 发表于 2021-10-31 14:01
你是想要生成二进制文件啊,我还以为是要读取二进制文件显示出来,那生成文件是依据哪个文件的数据呢?

["688700","300012","003300","603812"]  比如 这个数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 14:23:43 | 显示全部楼层
论坛怎么啦,回复看不到
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 15:35:47 | 显示全部楼层
molinchz 发表于 2021-10-31 14:23
论坛怎么啦,回复看不到

回复被吞就随便写吧
source = ["688700", "300012", "003300", "603812"]

with open("xx.cis", "ab") as cis:
    for string in source:
        bytel = bytes((1, 0)) + bytes(string, "utf-8")
        ba_length = len(bytel)
        if ba_length < 16:
            bytel += bytes(16 - ba_length)
        cis.write(bytel)

屏幕截图 2021-10-31 153141.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 16:01:20 | 显示全部楼层
hrpzcf 发表于 2021-10-31 15:35
回复被吞就随便写吧

大佬,6字开头,最前面 一字节 是01  ,其它是00
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 16:12:52 | 显示全部楼层    本楼为最佳答案   
molinchz 发表于 2021-10-31 16:01
大佬,6字开头,最前面 一字节 是01  ,其它是00
sl = ["688700", "300012", "003300", "603812"]

prefix0 = bytes((0, 0))
prefix1 = bytes((1, 0))
with open("xx.cis", "ab") as cisf:
    for string in sl:
        if string.startswith("6"):
            prefix = prefix1
        else:
            prefix = prefix0
        bytel = prefix + bytes(string, "utf-8")
        bl_length = len(bytel)
        if bl_length < 16:
            bytel += bytes(16 - bl_length)
        cisf.write(bytel)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-10-31 16:31:32 | 显示全部楼层

可以了,辛苦了大佬,下次另一个有中文就麻烦 了!!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-31 16:36:55 | 显示全部楼层
molinchz 发表于 2021-10-31 16:31
可以了,辛苦了大佬,下次另一个有中文就麻烦 了!!!!

知道转换规律就不难,不知道转换规律,不管是不是中文都麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我先研究下,不行在请教下你,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 20:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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