0

我有一个从文件中读取的列表,如下所示:

D0 DA D7 00 D0 DA D7 00 
D0 DA D7 00 F0 DA D7 00 
F0 DA D7 00 D0 DA D7 00 
D0 DA D7 00 D2 DA 8E 00 
D2 DA 9D 00 D2 DA D9 00 
D2 DA AC 00 D2 DA E8 00 
D2 DA F7 00 D2 DA 06 00 
D2 DA 15 00 D2 DA 24 00 
D2 DA 33 00 D2 DA 42 00 
D2 DA 51 00 D2 DA 60 00 
D2 DA 6F 00 D2 DA CA 00 
D2 DA 7E 00 D2 DA BB 00 
D0 DA D7 FF FF FF FF FF 

我正在通过读取一些看起来像这样的硬件来创建另一个列表:

 D0
 DA
 D7
 00
 DA
 .....

我想将我正在读回的这个列表格式化为与上面类似的列表。我不想创建两个列表,我读入其中一个,然后格式化并写入另一个。是否有一些语法可用于以第一个列表的格式自动将值读入第二个列表?

for ii in xrange(0xC000,0xFFFF,2):  
    rv2.write('m75421_2', regname, ii)
    time.sleep(0.001)
    mem_value = rv2.read('m75421_2',ii)
    list2.append(mem_value) ----some syntax that I can add to this append here

谢谢!

4

2 回答 2

0

我假设读取返回整数。

from itertools import izip_longest

def grouper(iterable, n, fillvalue=None):
    '''group into sub-sequences of size n'''
    args = [iter(iterable)] * n
    return izip_longest(fillvalue=fillvalue, *args)

def values(lo, hi, rv2, regname):
    '''yield memory values from lo to hi'''
    for ii in xrange(lo, hi, 2):  
        rv2.write('m75421_2', regname, ii)
        time.sleep(0.001)
        yield rv2.read('m75421_2', ii)

def fmt(line):
    '''format a line of integers as 2 digit hex with spaces'''
    return ' '.join(['%02x'] * len(line)) % line

map(fmt, grouper(values(0xC000, 0xFFFF, rv2, regname), 8, 0))

来自http://docs.python.org/2/library/itertools.html#recipes的石斑鱼

如果读取返回十六进制字符串:

def fmt(line):
    '''format a line of 2 digit hex strings'''
    return ' '.join(map(lambda s: s.strip(), line))

map(fmt, grouper(values(0xC000, 0xFFFF, rv2, regname), 8, '--'))
于 2013-07-26T01:29:55.497 回答
0

如果您的问题是如何格式化,您可以这样做:

>>> data=['D0', 'DA', 'D7', '00', 'D0', 'DA', 'D7', '00', 'D0', 'DA', 'D7', '00', 'F0', 'DA', 'D7', '00', 'F0', 'DA', 'D7', '00', 'D0', 'DA', 'D7', '00', 'D0', 'DA', 'D7', '00', 'D2', 'DA', '8E', '00', 'D2', 'DA', '9D', '00', 'D2', 'DA', 'D9', '00', 'D2', 'DA', 'AC', '00', 'D2', 'DA', 'E8', '00', 'D2', 'DA', 'F7', '00', 'D2', 'DA', '06', '00', 'D2', 'DA', '15', '00', 'D2', 'DA', '24', '00', 'D2', 'DA', '33', '00', 'D2', 'DA', '42', '00', 'D2', 'DA', '51', '00', 'D2', 'DA', '60', '00', 'D2', 'DA', '6F', '00', 'D2', 'DA', 'CA', '00', 'D2', 'DA', '7E', '00', 'D2', 'DA', 'BB', '00', 'D0', 'DA', 'D7', 'FF', 'FF', 'FF', 'FF', 'FF']
>>> cols=8
>>> print '\n'.join(' '.join(data[i:i+cols]) for i in range(0,len(data),cols))
D0 DA D7 00 D0 DA D7 00
D0 DA D7 00 F0 DA D7 00
F0 DA D7 00 D0 DA D7 00
D0 DA D7 00 D2 DA 8E 00
D2 DA 9D 00 D2 DA D9 00
D2 DA AC 00 D2 DA E8 00
D2 DA F7 00 D2 DA 06 00
D2 DA 15 00 D2 DA 24 00
D2 DA 33 00 D2 DA 42 00
D2 DA 51 00 D2 DA 60 00
D2 DA 6F 00 D2 DA CA 00
D2 DA 7E 00 D2 DA BB 00
D0 DA D7 FF FF FF FF FF
于 2013-07-25T20:47:03.167 回答