2010-03-10 4 views
0

могу ли я сделать это в цикле, создав имя файла из имени массива для хранения?получить переменную массива в python

ab = array.array('B', map(operator.xor, a, b)) 
f1 = open('ab', 'wb') 
ab.tofile(f1) 
f1.close 
ac = array.array('B', map(operator.xor, a, c)) 
f1 = open('ac', 'wb') 
ac.tofile(f1) 
f1.close 
ad = array.array('B', map(operator.xor, a, d)) 
f1 = open('ad', 'wb') 
ad.tofile(f1) 
f1.close 
ae = array.array('B', map(operator.xor, a, e)) 
f1 = open('ae', 'wb') 
ae.tofile(f1) 
f1.close 
af = array.array('B', map(operator.xor, a, f)) 
f1 = open('af', 'wb') 
af.tofile(f1) 
f1.close 

благодарим за любую помощь!

ответ

1

Один из способов иметь, б, в, г, д, е в Словаре. Тогда вы только что сделаете что-то вроде:

for x in 'bcdef': 
    t = array.array('B', map(operator.xor, mydict['a'], mydict[x])) 
    f1 = open(''.join('a',x),'wb') 
    t.tofile(f1) 
    f1.close() 
+0

Они в dict - это называется * locals() * :) –

+1

@Ian Да, но некоторые люди не любят использовать это, потому что это своего рода хак. –

+0

спасибо! делает ли он, если a, b, c, d, e, f также являются массивами? – lclevy

2

Предполагая, что вы храните все промежуточные массивы по определенной причине.

A={} 
for v,x in zip((b,c,d,e,f),'bcdef'): 
    fname = 'a'+x 
    A[fname] = (array.array('B', map(operator.xor, a, v))) 
    f1 = open(fname, 'wb') 
    A[fname].tofile(f1) 
    f1.close 

Или что-то подобное должно работать слишком

A={} 
for x in 'bcdef': 
    fname = 'a'+x 
    A[fname] = (array.array('B', map(a.__xor__, vars()[x]))) 
    f1 = open(fname, 'wb') 
    A[fname].tofile(f1) 
    f1.close 
+1

Разве это не просто вычисляет 'map (operator.xor, a, b)' повторно? –

+0

@ Марк Дикинсон, да, это было. Я исправил это сейчас :) –

Смежные вопросы