确定从文件读取的字节.

大家好,
我遇到了一个奇怪的问题,我需要确定金额
从文件中读取字节,但无法弄清楚,
我的程序做到了:
__
file = open(" somefile")
data = file.read()
打印"字节读",Len(数据)
---
但是字节读取未正确打印,我认为字节是
仅在遇到" \ 0"的第一次发生之前进行计数.
即使文件的尺寸非常大,字节直到第一个字节
计数'\ 0'.
有人可以就此建议我.
谢谢.
此致,
醋.

# 回答1


Vineeth写道:
我不信. python在阅读时不会解释数据和字节串
没有隐含的0基长度.
所以我认为您必须做一些不同的事情 - 显然以上不是
实际代码,但为此文章弥补了一些东西.向我们展示您的实际代码,
请.
diez
# 回答2


Vineeth在2007年12月13日星期四04:04:59 -0800写道:
如果要处理字节,请在二进制模式下更好地打开文件.
Windows改变了线路的结尾,并在特定字节上停止(忘记了
值)否则.
再见,
marc'blackjack'rintsch
# 回答3


在12月13日,11:04 pm,vineeth
# 回答4


在12月13日,下午5:13," Diez B. Roggisch" 我不信. python在阅读时不会解释数据和字节串
没有隐含的0基长度.
所以我认为您必须做一些不同的事情 - 显然以上不是
实际代码,但为此文章弥补了一些东西.向我们展示您的实际代码,
请.
迪兹
你好,
该程序试图从二进制中创建C BYTE数组
输入文件(for ex:将.png image带有应用程序作为一个
大批),
这是程序:
"""
Python脚本创建输入二进制文件的一些流.
用法:bit_stream_creator.py -i input_file -b bytes_to_dump
"""
导入系统
来自Binascii进口hexlify
从optparse导入选项器
如果Len(sys.argv)!= 5:
打印"不正确的args,用法:%s -i input_file -b bytes_to_dump"%
(sys.argv [0])
sys.exit(0)
Parser = optionParser()
parser.add_option(" - i"," - input",dest =" inputfileName")
parser.add_option(" - b"," - bytes",dest =" bytes")
(选项,args)= parser.parse_args()
打印" -i",options.inputfilename
打印" -b",options.bytes
#打开输入文件
infile = open(options.inputfileName)
#创建成员变量名称.
mem_var_name = options.inputfileName
mem_var_name = mem_var_name.replace('','_')
mem_var_name = mem_var_name.replace('.','_')
OUTFILE_C = OPEN(MEM_VAR_NAME +" .c"," W")
OUTFILE_H = OPEN(MEM_VAR_NAME +" .h"," W")
#阅读数据.
打印"读取%d字节....."%(int(options.bytes))
bytes_reqd = int(options.bytes)
data = infile.read(bytes_reqd)
打印"字节读",Len(数据)
#转换为十六进制小数表示
hex_data = hexlify(数据)
i = 0
#用内存转储编写C文件.
OUTFILE_C.WRITE("未签名的char%s [%d] = {\ n"%
(mem_var_name,bytes_reqd))
当我 超越 e_c.write(" 0x%c%c"%(hex_data [i],hex_data [i+1]))
i += 2
如果我!= len(hex_data):
OUTFILE_C.WRITE(",")
如果我%32 == 0:
OUTFILE_C.WRITE(" \ n")
OUTFILE_C.WRITE(" \ n}; \ n")
#用正向声明编写.h文件.
cpp_macro =" __"+mem_var_name.upper()+" _ h__"
OUTFILE_H.WRITE("#ifndef" + cpp_macro +" \ n")
OUTFILE_H.WRITE("#Define" + CPP_MACRO +" \ n")
OUTFILE_H.WRITE(" //%s,size%d \ n"%(mem_var_name,len(data)))
OUTFILE_H.WRITE(" Extern unsigned char%s [%d]; \ n"%
(mem_var_name,bytes_reqd))
OUTFILE_H.WRITE("#endif //" + cpp_macro +" \ n")
#close文件.
OUTFILE_C.CLOSE()
OUTFILE_H.CLOSE()
infile.close()
________
但是Len(数据)从未超出零字符.
任何帮助和技巧都将不胜感激.
谢谢并恭祝安康,
醋.
# 回答5


在12月13日,11:04 pm,vineeth Python不会停止阅读" \ 0".在文本模式下的Windows上
默认),'\ r \ n'将转换为'\ n',它将停止
阅读 ^z aka chr(26)aka'\ x1a'.如果您不想发生这种情况,
使用打开(" somefile"," rb")获得二进制模式.
# 回答6


在12月13日,下午5:27,Marc'Blackjack'Rintsch 如果要处理字节,请在二进制模式下更好地打开文件.
Windows改变了线路的结尾,并在特定字节上停止(忘记了
值)否则.
再见,
马克"二十一点" Rintsch
谢谢,非常感谢,以二进制模式打开文件.
# 回答7


Vineeth写道:
这是旁边
将自动将其转换为int,(我认为)给予更多
故障上有用的错误消息.
-
# 回答8


一些潜在的优化:
mem_var_name = options.inputfilename.replace('','_').替换('.'.
无需分配3次.
这可以重新编写:
对于xrange(0,len(hex_data),32)中的x:
output_c.write('%s \ n'%','.join([['0x%s'%''.join([['%c'%a for a in in in
hex_data [x:x+32] [i:i+2]])在xrange(0,32,2)]
# 回答9


在12月13日,晚上7:50,克里斯 mem_var_name = options.inputfilename.replace('','_').替换('.'.
无需分配3次.
这可以重新编写:
对于xrange(0,len(hex_data),32)中的x:
output_c.write('%s \ n'%','.join([['0x%s'%''.join([['%c'%a for a in in in
hex_data [x:x+32] [i:i+2]])在xrange(0、32、2)中i]
感谢大家的所有建议和优化,我是
仍然是新手,不知道这些,
谢谢!

标签: python

添加新评论