难以解析文本文件Python 2.7

时间:2016-08-01 06:22:43

标签: python python-2.7 file parsing

使用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
};

这应该成为(等等是上述的延续而不是实际存在):

0003B14BEC001D001E002100026A00(...etc...)02360000

上述代码的含义是:

#include <avr/pgmspace.h>

const unsigned char uj_code[] PROGMEM = {

    0003B14BEC001D001E002100026A00(...etc...)
    02360000

换句话说,我想删除所有字符,空行和0x以及除了单个连续行中的实际字节之外的东西,但我稍微嘲笑细微差别,我期待。有什么帮助吗?

2 个答案:

答案 0 :(得分:0)

@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的假设。否则我们需要更新正则表达式

答案 1 :(得分:0)

您的输入文件分为多行,您只需输出一行。

在编写之前,您只需要删除任何换行符:

data.strip("\n")