FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
awesome-python/sort.py at master · python-study-cxb/awesome-python · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
python-study-cxb
/
awesome-python
Public
forked from
vinta/awesome-python
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
awesome-python
/
sort.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
83 lines (69 loc) · 2.89 KB
Breadcrumbs
awesome-python
/
sort.py
Copy path
File metadata and controls
executable file
·
83 lines (69 loc) · 2.89 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#!/usr/bin/env python
# coding: utf-8
"""
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
sort_blocks
():
# First, we load the current README into memory
with
open
(
'README.md'
,
'r'
)
as
read_me_file
:
read_me
=
read_me_file
.
read
()
# Separating the 'table of contents' from the contents (blocks)
table_of_contents
=
''
.
join
(
read_me
.
split
(
'- - -'
)[
0
])
blocks
=
''
.
join
(
read_me
.
split
(
'- - -'
)[
1
]).
split
(
'
\n
# '
)
for
i
in
range
(
len
(
blocks
)):
if
i
==
0
:
blocks
[
i
]
=
blocks
[
i
]
+
'
\n
'
else
:
blocks
[
i
]
=
'# '
+
blocks
[
i
]
+
'
\n
'
# Sorting the libraries
inner_blocks
=
sorted
(
blocks
[
0
].
split
(
'##'
))
for
i
in
range
(
1
,
len
(
inner_blocks
)):
if
inner_blocks
[
i
][
0
]
!=
'#'
:
inner_blocks
[
i
]
=
'##'
+
inner_blocks
[
i
]
inner_blocks
=
''
.
join
(
inner_blocks
)
# Replacing the non-sorted libraries by the sorted ones and gathering all at the final_README file
blocks
[
0
]
=
inner_blocks
final_README
=
table_of_contents
+
'- - -'
+
''
.
join
(
blocks
)
with
open
(
'README.md'
,
'w+'
)
as
sorted_file
:
sorted_file
.
write
(
final_README
)
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
=
str
.
lower
))
for
block
in
blocks
]
# And the result is written back to README.md
sorted_file
.
write
(
''
.
join
(
blocks
))
# Then we call the sorting method
sort_blocks
()
if
__name__
==
"__main__"
:
main
()
Back
|
FazBrowse Home
|
New Git URL