mirror of
https://github.com/vinta/awesome-python.git
synced 2024-11-13 11:16:10 -05:00
Added python 3 script to sort entries in README.md
This commit is contained in:
parent
40ac968c09
commit
87fee426e2
1 changed files with 47 additions and 0 deletions
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()
|
Loading…
Reference in a new issue