使用Python 2.7,我想将一个文件作为输入,从中删除一些字符,然后将其写入另一个文件。我并没有完全成功地使用以下代码:
print 'processing .ujc file for transmit'
infile, outfile = open('app_code.ujc','r'), open('app_code_transmit.ujc','w')
data = infile.read()
data = data.replace("#include <avr/pgmspace.h> const unsigned char uj_code[] PROGMEM = {", "")
data = data.replace("0x", "")
data = data.replace(", ", "")
data = data.replace("};", "")
outfile.write(data)
输入文件(示例)为:
#include <avr/pgmspace.h>
const unsigned char uj_code[] PROGMEM = {
0x00, 0x03, 0xB1, 0x4B, 0xEC, 0x00, 0x1D, 0x00, 0x1E, 0x00, 0x21, 0x00, 0x02, 0x6A, 0x00, 0x02,
0x6A, 0x00, 0x02, 0xE3, 0x3F, 0x00, 0x1F, 0x00, 0x02, 0x2C, 0x00, 0x01, 0x3B, 0x00, 0x02, 0x36, 0x00, 0x00
};
这应该成为(etc是上述内容的延续,实际上并不存在):
0003B14BEC001D001E002100026A00(...etc...)02360000
我用上面的代码得到的是:
#include <avr/pgmspace.h>
const unsigned char uj_code[] PROGMEM = {
0003B14BEC001D001E002100026A00(...etc...)
02360000
换言之,我想删除所有字符、空行和0x等,除了一行连续行中的实际字节之外,但我有点被细微差别绊倒了。有什么帮助吗?
@MKesper是对的。读取文件时,根据操作系统的不同,会有\n或\r\n(行分隔符)。从预期的输出来看,我觉得更好的方法是提取所需的数据,而不是删除不需要的数据。我想从正则表达式中得到一些帮助,下面是我的尝试:
import re
print 'processing .ujc file for transmit'
infile, outfile = open('app_code.ujc','r'), open('app_code_transmit.ujc','w')
data = infile.read()
# Expect 0003B14BEC001D001E002100026A00026A0002E33F001F00022C00013B0002360000 to be the output
outfile.write(''.join(re.findall('0x([0-9a-fA-F][0-9a-fA-F])', data)))
更新1:这是基于您没有任何其他0x的假设。否则,我们需要更新正则表达式
您的输入文件在多行上被拆分,您只需要一行输出。
你只需要在写之前去掉任何换行符:
data.strip("n")