Awesome-Linux-Software/auto_sort/asort.py

80 lines
2.3 KiB
Python

#!/usr/bin/env python3
# -*-coding: utf-8-*-
# Author : Christopher L
# Blog : http://blog.chriscabin.com
# GitHub : https://www.github.com/chrisleegit
# File : asort.py
# Date : 2016/08/22 11:12
# Version: 0.1
# Description: A very simple python script that can sort items alphabetically.
from __future__ import print_function
import os
import shutil
import re
README_FILE = '../README.md'
TEMP_FILE = 'temp.md'
# only works for those items between BEGIN and END.
BEGIN = '## Applications'
END = '## Setup'
regex = re.compile(r"[^[]*\[([^]]*)\]")
def main():
global README_FILE
# make sure the script can find file: README.md
README_FILE = os.path.abspath(README_FILE)
if not os.path.exists(README_FILE):
print(f'Error: no such file or directory: {README_FILE}')
exit(1)
sort_enable = False
items = []
print(f'Loading file: {README_FILE}')
# read file: README.md
with (open(README_FILE) as infile, open(TEMP_FILE, 'w') as outfile):
# process each line
for line in infile:
if not sort_enable and BEGIN in line:
sort_enable = True
# if sort_enable and END in line:
# sort_enable = False
if sort_enable and line.startswith(('-')):
line = line.strip()
items.append(line)
elif sort_enable and not line.startswith(('-')) and line == '\n':
# when we meet the next header, we should stop adding new item to the list.
for item in sorted(items, key=lambda x: regex.findall(x.upper())[len(regex.findall(x.upper()))-1]):
# write the ordered list to the temporary file.
print(item, file=outfile)
items.clear()
# remember to put the next header in the temporary file.
print(line, end='', file=outfile)
elif (
sort_enable
and not line.startswith(('-'))
and line != '\n'
and line.startswith('#')
):
sort_enable = END not in line
print(line, end='', file=outfile)
else:
print(line, end='', file=outfile)
print('Replace the original file: README.md')
shutil.move(TEMP_FILE, README_FILE)
if __name__ == '__main__':
main()