Update sort.py

This commit is contained in:
Ahmed Abdelaal 2016-11-11 16:45:39 +03:00 committed by GitHub
parent 60734b11e8
commit ebab050c3b
1 changed files with 22 additions and 25 deletions

45
sort.py
View File

@ -15,35 +15,32 @@
def main(): def main():
# First, we load the current README into memory as an array of lines # First, we load the current README into memory
with open('README.md', 'r') as read_me_file: with open('README.md', 'r') as read_me_file:
read_me = read_me_file.readlines() read_me = read_me_file.read()
# Then we cluster the lines together as blocks # Separating the 'table of contents' from the contents (blocks)
# Each block represents a collection of lines that should be sorted table_of_contents = ''.join(read_me.split('- - -')[0])
# This was done by assuming only links ([...](...)) are meant to be sorted blocks = ''.join(read_me.split('- - -')[1]).split('\n# ')
# Clustering is done by indentation for i in range(len(blocks)):
blocks = [] if i == 0:
last_indent = None blocks[i] = blocks[i]+'\n'
for line in read_me: else:
s_line = line.lstrip() blocks[i] = '#' + blocks[i]+'\n'
indent = len(line) - len(s_line)
if any([s_line.startswith(s) for s in ['* [', '- [']]): # Sorting the libraries
if indent == last_indent: inner_blocks = sorted(blocks[0].split('##'))
blocks[-1].append(line) for i in range(1 , len(inner_blocks)):
else: if inner_blocks[i][0] != '#':
blocks.append([line]) inner_blocks[i]='##'+inner_blocks[i]
last_indent = indent inner_blocks=''.join(inner_blocks)
else:
blocks.append([line]) # Replacing the non-sorted libraries by the sorted ones and gathering all at the final_README file
last_indent = None blocks[0] = inner_blocks
final_README = table_of_contents + '- - -'+ ''.join(blocks)
with open('README.md', 'w+') as sorted_file: with open('README.md', 'w+') as sorted_file:
# Then all of the blocks are sorted individually sorted_file.write(final_README)
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__": if __name__ == "__main__":