Added python 3 script to sort entries in README.md
This commit is contained in:
		
							
								
								
									
										47
									
								
								sort.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								sort.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,47 @@
 | 
				
			|||||||
 | 
					"""
 | 
				
			||||||
 | 
					    The approach taken is explained below. I decided to do it simply.
 | 
				
			||||||
 | 
					    Initially I was considering parsing the data into some sort of
 | 
				
			||||||
 | 
					    structure and then generating an appropriate README. I am still
 | 
				
			||||||
 | 
					    considering doing it - but for now this should work. The only issue
 | 
				
			||||||
 | 
					    I see is that it only sorts the entries at the lowest level, and that
 | 
				
			||||||
 | 
					    the order of the top-level contents do not match the order of the actual
 | 
				
			||||||
 | 
					    entries.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    This could be extended by having nested blocks, sorting them recursively
 | 
				
			||||||
 | 
					    and flattening the end structure into a list of lines. Revision 2 maybe ^.^.
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def main():
 | 
				
			||||||
 | 
					    #First, we load the current README into memory as an array of lines
 | 
				
			||||||
 | 
					    with open('README.md', 'r') as read_me_file:
 | 
				
			||||||
 | 
					        read_me = read_me_file.readlines()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    #Then we cluster the lines together as blocks
 | 
				
			||||||
 | 
					    #Each block represents a collection of lines that should be sorted
 | 
				
			||||||
 | 
					    #This was done by assuming only links ([...](...)) are meant to be sorted
 | 
				
			||||||
 | 
					    #Clustering is done by indentation
 | 
				
			||||||
 | 
					    blocks = []
 | 
				
			||||||
 | 
					    last_indent = None
 | 
				
			||||||
 | 
					    for line in read_me:
 | 
				
			||||||
 | 
					        s_line = line.lstrip()
 | 
				
			||||||
 | 
					        indent = len(line) - len(s_line)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if any([s_line.startswith(s) for s in ['* [', '- [']]):
 | 
				
			||||||
 | 
					            if indent == last_indent:
 | 
				
			||||||
 | 
					                blocks[-1].append(line)
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
 | 
					                blocks.append([line])
 | 
				
			||||||
 | 
					            last_indent = indent
 | 
				
			||||||
 | 
					        else:
 | 
				
			||||||
 | 
					            blocks.append([line])
 | 
				
			||||||
 | 
					            last_indent = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    with open('README.md', 'w+') as sorted_file:
 | 
				
			||||||
 | 
					        #Then all of the blocks are sorted individually
 | 
				
			||||||
 | 
					        blocks = [''.join(sorted(block, key=lambda s: s.lower())) for block in blocks]
 | 
				
			||||||
 | 
					        #And the result is written back to README.md
 | 
				
			||||||
 | 
					        sorted_file.write(''.join(blocks))
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    main()
 | 
				
			||||||
		Reference in New Issue
	
	Block a user