Python Forum
How get attributes of maps from loop statement - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: How get attributes of maps from loop statement (/thread-12353.html)



How get attributes of maps from loop statement - LB_994 - Aug-21-2018

Hi! So I am working on a model which will locate irrigation areas to its nearest water source on a global level.
This is a piece of my script of the river areas all over the world, categorized for each continent;

landmask_regions= { \
		'Africa': ['mask_M01.map', 'mask_M02.map', 'mask_M03.map', \
			'mask_M05.map', 'mask_M06.map', 'mask_M07.map', 'mask_M08.map', \
			'mask_M09.map'], \
		'Asia': ['mask_M04.map', 'mask_M05.map', 'mask_M10.map', 'mask_M11.map', \
			'mask_M12.map', 'mask_M13.map', 'mask_M14.map', 'mask_M15.map', \
			'mask_M16.map', 'mask_M17.map', 'mask_M18.map', 'mask_M19.map', \
			'mask_M20.map', 'mask_M21.map', 'mask_M22.map', 'mask_M23.map'], \
		'Europe': ['mask_M26.map', 'mask_M28.map', 'mask_M32.map', 'mask_M33.map', \
			'mask_M34.map'], \
		'N-America': ['mask_M25.map', 'mask_M35.map', 'mask_M36.map', 'mask_M37.map', \
			'mask_M38.map', 'mask_M39.map', 'mask_M40.map', 'mask_M41.map', \
			'mask_M42.map', 'mask_M43.map', 'mask_M44.map', 'mask_M45.map', 'mask_M46.map'], \
		'Australia': ['mask_M47.map', 'mask_M48.map', 'mask_M49.map'], \
		'S-America': ['mask_M24.map', 'mask_M50.map', 'mask_M51.map', \
			'mask_M52.map', 'mask_M53.map']}

    choice = 'Europe'
	if choice == 'whole_world':
			maps = sum(landmask_regions.values(), [])
			print "processing world maps"
			for region in maps:
				print region
	elif choice in landmask_regions:
			maps = landmask_regions[choice]
			print "processing continent"
			for region in maps:
				print region
	elif choice.endswith('.map'):
			maps = [choice]
			print "processing river area"
			for region in maps:
				print region	
So in my script, I have created methods that call one another to complete the following tasks:
- Read all the maps together (for a global map)
- Read all the maps of one region (for each continent)
- Read one specific region within a continent (for one river area)

Now I would like to get those maps (in this case from Europe), and to be able to 'read' them; this implies getting the attributes (such as location, x/y coordinates etc.) I was thinking of just using the 'getattr' function, but I'm not sure how to do that here.
Can someone maybe provide me with tips on how to adjust my script in order to do that? I hope my question is clear!
Thank you!


RE: How get attributes of maps from loop statement - Larz60+ - Aug-21-2018

This doesn't answer your question, but makes your code much more readable, and corrects
PEP8 inconsistencies.

You can save your dictionary as a json file with:
import json

landmask_regions= { \
        'Africa': ['mask_M01.map', 'mask_M02.map', 'mask_M03.map', \
            'mask_M05.map', 'mask_M06.map', 'mask_M07.map', 'mask_M08.map', \
            'mask_M09.map'], \
        'Asia': ['mask_M04.map', 'mask_M05.map', 'mask_M10.map', 'mask_M11.map', \
            'mask_M12.map', 'mask_M13.map', 'mask_M14.map', 'mask_M15.map', \
            'mask_M16.map', 'mask_M17.map', 'mask_M18.map', 'mask_M19.map', \
            'mask_M20.map', 'mask_M21.map', 'mask_M22.map', 'mask_M23.map'], \
        'Europe': ['mask_M26.map', 'mask_M28.map', 'mask_M32.map', 'mask_M33.map', \
            'mask_M34.map'], \
        'N-America': ['mask_M25.map', 'mask_M35.map', 'mask_M36.map', 'mask_M37.map', \
            'mask_M38.map', 'mask_M39.map', 'mask_M40.map', 'mask_M41.map', \
            'mask_M42.map', 'mask_M43.map', 'mask_M44.map', 'mask_M45.map', 'mask_M46.map'], \
        'Australia': ['mask_M47.map', 'mask_M48.map', 'mask_M49.map'], \
        'S-America': ['mask_M24.map', 'mask_M50.map', 'mask_M51.map', \
            'mask_M52.map', 'mask_M53.map']}

with open('landmarks.json', 'w') as jp:
    json.dump(landmask_regions, jp)
and modify your code like (cleaner):
import json


def main():
    with open('landmarks.json') as jp:
        landmask_regions = json.load(jp)

    choice = 'Europe'
    if choice == 'whole_world':
        maps = sum(landmask_regions.values(), [])
        print "processing world maps"
        for region in maps:
            print region
    elif choice in landmask_regions:
        maps = landmask_regions[choice]
        print "processing continent"
        for region in maps:
            print region
    elif choice.endswith('.map'):
        maps = [choice]
        print "processing river area"
        for region in maps:
            print region


if __name__ == '__main__':
    main()



RE: How get attributes of maps from loop statement - ichabod801 - Aug-21-2018

In the code you posted the maps are just strings, like 'mask_MO1.map'. I'm assuming this points to some sort of file with map data? If so, you'd have to load that data into Python somehow, and how you accessed the information for each map would depend on how it was loaded into Python.


RE: How get attributes of maps from loop statement - LB_994 - Aug-21-2018

Yeah that's exactly what I'm struggling with to be honest.
Because I have 'imported' these files now just as strings, and I hoped to read them in as maps after I have first indentified the names I need (so depending on the continent/area etc.).
But I feel like I'm stuck on how to properly do that.