Python从文件中读取十六进制数并写入另一个文件&引用;无效文字“;在';int';分配
Python从文件中读取十六进制数并写入另一个文件&引用;无效文字“;在';int';分配,python,hex,literals,Python,Hex,Literals,/dev/input/event0:0003 0001 000081a5 应该成为 sendevent 0003 0001 000081a5 在新文件中 代码是 import sys import fileinput prefix = 'sendevent ' inputline = None complete = None part1len = 0 part1 = None part2 = None num1 = 0 num2 = 0 num3 = 0 rawfile = None
/dev/input/event0:0003 0001 000081a5
应该成为
sendevent 0003 0001 000081a5
在新文件中
代码是
import sys
import fileinput
prefix = 'sendevent '
inputline = None
complete = None
part1len = 0
part1 = None
part2 = None
num1 = 0
num2 = 0
num3 = 0
rawfile = None
outfile = None
filename = None
rawfile = sys.argv[-1]
fo = open(rawfile, 'r')
filename = rawfile.find('.');
outfile = rawfile[:filename] + '.scr'
fw = open(outfile, 'w')
fw.write('#!/bin/sh' + '\n')
fw.write('echo Running - signature function ' + '\n')
for inputline in fo.read().split('\n'):
part1len = inputline.find(':');
if part1len > -1:
part1 = inputline[:part1len]
part2 = inputline.split(' ')
num1 = int(part2[1], 16)
num2 = int(part2[2], 16)
num3 = int(part2[3], 16)
complete = prefix + part1 + " " + str(num1) + " " + str(num2) + " " + str(num3)
fw.write(complete + '\n')
print 'Processing complete'
print 'File created: ', outfile
print
print 'Copy file to the device'
print 'adb push ' + outfile + ' /sdcard/' + outfile
print
print 'Run the script'
print 'adb shell sh /sdcard/' + outfile
fo.close()
fw.close()
输出命令行中的错误为:
Traceback (most recent call last):
File "Android\decs.py", line 41, in <module>
num1 = int(part2[1], 16)
ValueError: invalid literal for int() with base 16: '='
回溯(最近一次呼叫最后一次):
文件“Android\decs.py”,第41行,在
num1=int(第2[1]部分,16)
ValueError:基为16的int()的文本无效:'='
今天刚开始学习Python。我不确定出了什么问题。曾在网上发布过类似错误,但无法找到解决方案
谢谢您的文件有一行看起来像
123=
。另外,不要对fo.read().split('\n')中的inputline执行。您只需对fo中的inputline执行,
与示例数据不同,实际数据的某个地方有一个等号。检查你的数据。你应该用十六进制还是十进制写出数字?您当前的代码(如果有效的话)将使用十进制,但您的示例显示它应该使用十六进制。如果这个例子是正确的,那么最好不要解析这些数字,而只是将它们作为未修改的字符串传递