[Tutor] pythonic
George Fischhof
george at fischhof.hu
Fri Mar 30 05:15:55 EDT 2018
2018-03-30 4:48 GMT+02:00 Pat Martin <wpmartin at gmail.com>:
> Hello all,
>
> I have written the following program. It generates a template for Pelican
> web site static generator. It works just fine, it generates the template
> and then I put the info in it to customize. But I was wondering, is this
> the "right" way to do it in python?
>
> #!/usr/bin/env python3
> """Generate a Pelican markdown base page."""
>
> import argparse
> import datetime
>
>
> def Main():
> """Run if run as a program."""
> parser = argparse.ArgumentParser()
> parser.add_argument("-T", "--title", type=str, required=True,
> help='Title for site, also generates the slug',
> metavar="")
> parser.add_argument("-c", "--category", required=True,
> help='Category or categories of post', metavar="")
> parser.add_argument("-t", "--tags", type=str, required=True,
> help="Tags for post", metavar="")
> parser.add_argument("-a", "--author", type=str, default="Pat Martin",
> help="Author of post", metavar="")
> args = parser.parse_args()
>
> now = datetime.datetime.now()
> slug = args.title.replace(" ", "-").lower()
>
> with open("{}.md".format(slug), 'w') as f:
> f.write("Title: {}\n".format(args.title))
> f.write("Date: {}-{}-{} {}:{}\n".format(now.year,
> now.month,
> now.day,
> now.hour,
> now.minute))
> f.write("Modified: {}-{}-{} {}:{}\n".format(now.year,
> now.month,
> now.day,
> now.hour,
> now.minute))
> f.write("Category: {}\n".format(args.category))
> f.write("Slug: {}\n".format(slug))
> f.write("Authors: {}\n".format(args.author))
> f.write("Summary: \n")
>
>
> if __name__ == "__main__":
> Main()
>
>
>
> Thanks for any input.
>
> WP
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
Hi Pat,
my thoughts:
1.)
def Main():
function names are written with small letter with underscore between the
words
check PEP-8
https://www.python.org/dev/peps/pep-0008/
http://docs.python-guide.org/en/latest/writing/style/
It is better to name the functions according to what they do, in this case
for example: create_template() or something like that
2.)
argparse
it is good, but you can write more Pythonic code using click
https://pypi.python.org/pypi/click/
it is also Pythonic to use / know the Python ecosystem (the packages)
3.)
with open("{}.md".format(slug), 'w') as f:
f.write("Date: {}-{}-{} {}:{}\n".format(now.year,
now.month,....
Python is mainly about readability
https://www.python.org/dev/peps/pep-0020/
you can use more meaningful variable names: template_file instead of f
if you have Python 3.6, you can use the newest formatting method, which is
more readable:
template_file.write(f"Date: {now.moth}-{now.day}") etc
https://www.python.org/dev/peps/pep-0498/
the more readable open:
slug_file_name = f"{slug}.md"
with open(slug_file_name, "w") as slug_file:
and if you use Python 3, the open should contain encoding:
with open(slug_file_name, "w", encoding="UTF-8") as slug_file:
BR,
George
More information about the Tutor
mailing list