鱼C论坛

 找回密码
 立即注册
查看: 2995|回复: 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
  1. sl = ["688700", "300012", "003300", "603812"]

  2. prefix0 = bytes((0, 0))
  3. prefix1 = bytes((1, 0))
  4. with open("xx.cis", "ab") as cisf:
  5.     for string in sl:
  6.         if string.startswith("6"):
  7.             prefix = prefix1
  8.         else:
  9.             prefix = prefix0
  10.         bytel = prefix + bytes(string, "utf-8")
  11.         bl_length = len(bytel)
  12.         if bl_length < 16:
  13.             bytel += bytes(16 - bl_length)
  14.         cisf.write(bytel)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-10-31 11:03:30 | 显示全部楼层
左侧的不是ascii编码,只能说是数据的16进制字节。真正的编码要看文件头。
右侧是文本读取器尝试解析后显示的结果,看起来有中文,应该不是ASCII。
你想实现什么效果,详细说一下。另外把文件发出来。
小甲鱼最新课程 -> https://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)
小甲鱼最新课程 -> https://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 这样存放  。这样来用软件创建这二个文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是把文件的每个字节值都转成十六进制字符形式呗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

是的,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

老师,文件 生成的是16进制的, 也是还要补位00 ,不然软件 是读不到的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

唉,回复几个都被审核
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我都 看不到哦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个文件 生成的就没有补位
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 13:49:11 | 显示全部楼层
请老师帮忙看下先创建生成这个*.cis文件
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你是想要生成二进制文件啊,我还以为是要读取二进制文件显示出来,那生成文件是依据哪个文件的数据呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

["688700","300012","003300","603812"]  比如 这个数据
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-10-31 14:23:43 | 显示全部楼层
论坛怎么啦,回复看不到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  2. with open("xx.cis", "ab") as cis:
  3.     for string in source:
  4.         bytel = bytes((1, 0)) + bytes(string, "utf-8")
  5.         ba_length = len(bytel)
  6.         if ba_length < 16:
  7.             bytel += bytes(16 - ba_length)
  8.         cis.write(bytel)
复制代码


屏幕截图 2021-10-31 153141.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

大佬,6字开头,最前面 一字节 是01  ,其它是00
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  2. prefix0 = bytes((0, 0))
  3. prefix1 = bytes((1, 0))
  4. with open("xx.cis", "ab") as cisf:
  5.     for string in sl:
  6.         if string.startswith("6"):
  7.             prefix = prefix1
  8.         else:
  9.             prefix = prefix0
  10.         bytel = prefix + bytes(string, "utf-8")
  11.         bl_length = len(bytel)
  12.         if bl_length < 16:
  13.             bytel += bytes(16 - bl_length)
  14.         cisf.write(bytel)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

可以了,辛苦了大佬,下次另一个有中文就麻烦 了!!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

知道转换规律就不难,不知道转换规律,不管是不是中文都麻烦
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我先研究下,不行在请教下你,非常感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-1 06:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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