2010-11-08 21 views
5

मैं एक छवि प्रसंस्करण स्क्रिप्ट पर काम कर रहा हूं। मुझे उपयोगकर्ता को टेक्स्ट फ़ाइल के माध्यम से किसी छवि में कुछ वर्गों को रीमेप करने का तरीका निर्दिष्ट करने की आवश्यकता है। इस फ़ाइल में वाक्यविन्यास सरल और आत्म-स्पष्ट होना चाहिए।एक शब्दकोश के स्ट्रिंग प्रस्तुति को वास्तविक शब्दकोश में बदलना

125:126, 126:126, 127:128, 128:128 

और फिर इसे एक असली शब्दकोश में बदलना (इस लापता कड़ी है):

a = {125:126, 126:126, 127:128, 128:128} 

मैं क्या कर के बारे में सोचा एक शब्दकोश की स्ट्रिंग संस्करण लिखने के लिए उपयोगकर्ता प्राप्त करने के लिए है छवि की कक्षाओं के remapping तो इस तरह से किया जाना होगा:

u, indices = numpy.unique(image, return_inverse=True) 
for i in range(0, len(u)): 
    u[i] = a[u[i]] 
updatedimage = u[indices] 
updatedimage = numpy.resize(updatedimage, (height, width)) #Resize to original dims 

वहाँ कोई वास्तविक शब्दकोश में "स्ट्रिंग संस्करण" से इस बदलाव करने के लिए एक आसान तरीका है? क्या आप एक आसान/वैकल्पिक एक-पंक्ति वाक्यविन्यास के बारे में सोच सकते हैं जिसे उपयोगकर्ता उपयोग कर सकता है?

उत्तर

11

आप ast.literal_eval उपयोग कर सकते हैं:

>>> import ast 
>>> ast.literal_eval('{' + s + '}') 
{128: 128, 125: 126, 126: 126, 127: 128} 

ध्यान दें कि यह अजगर 2.6 या उच्चतर की आवश्यकता होती।

एक वैकल्पिक ',' पर स्ट्रिंग विभाजित और फिर ':' पर प्रत्येक टुकड़ा विभाजित है और एक dict कि से निर्माण करने के लिए है:

>>> dict(map(int, x.split(':')) for x in s.split(',')) 
{128: 128, 125: 126, 126: 126, 127: 128} 

दोनों उदाहरण मान लेते हैं कि अपने प्रारंभिक स्ट्रिंग एक चर s कहा जाता है:

>>> s = '125:126, 126:126, 127:128, 128:128' 
+0

धन्यवाद, दोनों महान काम करते हैं। मैं आपका विकल्प पसंद करता हूं; यह एक और आयात बचाएगा, और पुराने संस्करण के साथ काम करेगा ... – Benjamin

संबंधित मुद्दे