Python tool to assemble CodeReview posts from source files

Multi tool use
Multi tool use

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty margin-bottom:0;







up vote
7
down vote

favorite
2












I hate having to format questions around here. Adding four spaces to each source file and the correct name at the top of each source file becomes a headache when I have to post longer questions.



This is a simple python question parser that takes in arguments from the console and prints out correct format for a CodeReview question. Any suggestions on how to make this code more readable, concise and pythonic would be appreciated.



Question Parser.py



import os
import sys
import argparse

def format_string(PATH,EXTENSION):
source_files=[f for f in os.listdir(PATH) if os.path.isfile(os.path.join(PATH,f))]
source_files=[f for f in source_files if f.endswith(EXTENSION)]

indentation=4
formatted_string=""
for source_file in source_files:
formatted_string+= ("**%s**nn" % source_file)
with open(os.path.join(PATH,source_file)) as source:
for line in source.readlines():
formatted_string+=(" "*indentation+"".join(line))

return formatted_string



if __name__=="__main__":
parser=argparse.ArgumentParser(description="Automatic formatter for CodeReview Stackexchange Questions")
parser.add_argument("-p","--path",help="Path for the source files. Default is the current directory",nargs="?",default=os.getcwd(),const=os.getcwd())
parser.add_argument("header",help="The file that is added to the top of the question")
parser.add_argument("-e","--extension",help="Filter by the type of source files that is present in the directory",nargs="+",default="")
parser.add_argument("-o","--out",help="Output the result to a file. By default outputs to the console.",nargs="?")
args=parser.parse_args()

if not os.path.isfile(args.header):
raise parser.error("Header file doesnot exist.nPlease specify a correct header file path")

if os.path.exists(args.path):
question="".join(open(args.header).readlines())
question+="n"+format_string(args.path,tuple(args.extension,))
if not (args.out==None):
with open(args.out,"w") as outfile:
outfile.write(question)
else:
print(question)

else:
raise parser.error("Path doesnot exist.")









share|improve this question





























    up vote
    7
    down vote

    favorite
    2












    I hate having to format questions around here. Adding four spaces to each source file and the correct name at the top of each source file becomes a headache when I have to post longer questions.



    This is a simple python question parser that takes in arguments from the console and prints out correct format for a CodeReview question. Any suggestions on how to make this code more readable, concise and pythonic would be appreciated.



    Question Parser.py



    import os
    import sys
    import argparse

    def format_string(PATH,EXTENSION):
    source_files=[f for f in os.listdir(PATH) if os.path.isfile(os.path.join(PATH,f))]
    source_files=[f for f in source_files if f.endswith(EXTENSION)]

    indentation=4
    formatted_string=""
    for source_file in source_files:
    formatted_string+= ("**%s**nn" % source_file)
    with open(os.path.join(PATH,source_file)) as source:
    for line in source.readlines():
    formatted_string+=(" "*indentation+"".join(line))

    return formatted_string



    if __name__=="__main__":
    parser=argparse.ArgumentParser(description="Automatic formatter for CodeReview Stackexchange Questions")
    parser.add_argument("-p","--path",help="Path for the source files. Default is the current directory",nargs="?",default=os.getcwd(),const=os.getcwd())
    parser.add_argument("header",help="The file that is added to the top of the question")
    parser.add_argument("-e","--extension",help="Filter by the type of source files that is present in the directory",nargs="+",default="")
    parser.add_argument("-o","--out",help="Output the result to a file. By default outputs to the console.",nargs="?")
    args=parser.parse_args()

    if not os.path.isfile(args.header):
    raise parser.error("Header file doesnot exist.nPlease specify a correct header file path")

    if os.path.exists(args.path):
    question="".join(open(args.header).readlines())
    question+="n"+format_string(args.path,tuple(args.extension,))
    if not (args.out==None):
    with open(args.out,"w") as outfile:
    outfile.write(question)
    else:
    print(question)

    else:
    raise parser.error("Path doesnot exist.")









    share|improve this question

























      up vote
      7
      down vote

      favorite
      2









      up vote
      7
      down vote

      favorite
      2






      2





      I hate having to format questions around here. Adding four spaces to each source file and the correct name at the top of each source file becomes a headache when I have to post longer questions.



      This is a simple python question parser that takes in arguments from the console and prints out correct format for a CodeReview question. Any suggestions on how to make this code more readable, concise and pythonic would be appreciated.



      Question Parser.py



      import os
      import sys
      import argparse

      def format_string(PATH,EXTENSION):
      source_files=[f for f in os.listdir(PATH) if os.path.isfile(os.path.join(PATH,f))]
      source_files=[f for f in source_files if f.endswith(EXTENSION)]

      indentation=4
      formatted_string=""
      for source_file in source_files:
      formatted_string+= ("**%s**nn" % source_file)
      with open(os.path.join(PATH,source_file)) as source:
      for line in source.readlines():
      formatted_string+=(" "*indentation+"".join(line))

      return formatted_string



      if __name__=="__main__":
      parser=argparse.ArgumentParser(description="Automatic formatter for CodeReview Stackexchange Questions")
      parser.add_argument("-p","--path",help="Path for the source files. Default is the current directory",nargs="?",default=os.getcwd(),const=os.getcwd())
      parser.add_argument("header",help="The file that is added to the top of the question")
      parser.add_argument("-e","--extension",help="Filter by the type of source files that is present in the directory",nargs="+",default="")
      parser.add_argument("-o","--out",help="Output the result to a file. By default outputs to the console.",nargs="?")
      args=parser.parse_args()

      if not os.path.isfile(args.header):
      raise parser.error("Header file doesnot exist.nPlease specify a correct header file path")

      if os.path.exists(args.path):
      question="".join(open(args.header).readlines())
      question+="n"+format_string(args.path,tuple(args.extension,))
      if not (args.out==None):
      with open(args.out,"w") as outfile:
      outfile.write(question)
      else:
      print(question)

      else:
      raise parser.error("Path doesnot exist.")









      share|improve this question















      I hate having to format questions around here. Adding four spaces to each source file and the correct name at the top of each source file becomes a headache when I have to post longer questions.



      This is a simple python question parser that takes in arguments from the console and prints out correct format for a CodeReview question. Any suggestions on how to make this code more readable, concise and pythonic would be appreciated.



      Question Parser.py



      import os
      import sys
      import argparse

      def format_string(PATH,EXTENSION):
      source_files=[f for f in os.listdir(PATH) if os.path.isfile(os.path.join(PATH,f))]
      source_files=[f for f in source_files if f.endswith(EXTENSION)]

      indentation=4
      formatted_string=""
      for source_file in source_files:
      formatted_string+= ("**%s**nn" % source_file)
      with open(os.path.join(PATH,source_file)) as source:
      for line in source.readlines():
      formatted_string+=(" "*indentation+"".join(line))

      return formatted_string



      if __name__=="__main__":
      parser=argparse.ArgumentParser(description="Automatic formatter for CodeReview Stackexchange Questions")
      parser.add_argument("-p","--path",help="Path for the source files. Default is the current directory",nargs="?",default=os.getcwd(),const=os.getcwd())
      parser.add_argument("header",help="The file that is added to the top of the question")
      parser.add_argument("-e","--extension",help="Filter by the type of source files that is present in the directory",nargs="+",default="")
      parser.add_argument("-o","--out",help="Output the result to a file. By default outputs to the console.",nargs="?")
      args=parser.parse_args()

      if not os.path.isfile(args.header):
      raise parser.error("Header file doesnot exist.nPlease specify a correct header file path")

      if os.path.exists(args.path):
      question="".join(open(args.header).readlines())
      question+="n"+format_string(args.path,tuple(args.extension,))
      if not (args.out==None):
      with open(args.out,"w") as outfile:
      outfile.write(question)
      else:
      print(question)

      else:
      raise parser.error("Path doesnot exist.")






      python file formatting stackexchange






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Sep 2 at 5:45

























      asked Sep 2 at 5:26









      Gnik

      15010




      15010




















          1 Answer
          1






          active

          oldest

          votes

















          up vote
          7
          down vote



          accepted










          PEP 8



          I would review PEP 8. Some of your style choices are not considered best practice by the Python community. Some quick observations:



          1. Constants are given CAPS_WITH_UNDERSCORES. Not function/method parameters. PATH should be path for instance.

          2. There is a space between the binary operators (there are, however, some exceptions: see Other Recommendations). So, for instance: indentation=4 should be indentation = 4.

          3. Instead of if not (args.out==None):, You should do if args.out is not None: (See Programming Recommendations)

          4. I would advise making a main function. Yes if __name__ == '__main__': is a start but I would recommend having a main function (see this answer, in particular the section "An Even Better Way"):

          --



          def main(): 
          parser=argparse.ArgumentParser(...)
          ...

          if __name__ == '__main__':
          main()





          share|improve this answer




















            Your Answer




            StackExchange.ifUsing("editor", function ()
            return StackExchange.using("mathjaxEditing", function ()
            StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
            StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
            );
            );
            , "mathjax-editing");

            StackExchange.ifUsing("editor", function ()
            StackExchange.using("externalEditor", function ()
            StackExchange.using("snippets", function ()
            StackExchange.snippets.init();
            );
            );
            , "code-snippets");

            StackExchange.ready(function()
            var channelOptions =
            tags: "".split(" "),
            id: "196"
            ;
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function()
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled)
            StackExchange.using("snippets", function()
            createEditor();
            );

            else
            createEditor();

            );

            function createEditor()
            StackExchange.prepareEditor(
            heartbeatType: 'answer',
            convertImagesToLinks: false,
            noModals: false,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            );



            );













             

            draft saved


            draft discarded


















            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f202968%2fpython-tool-to-assemble-codereview-posts-from-source-files%23new-answer', 'question_page');

            );

            Post as a guest






























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            7
            down vote



            accepted










            PEP 8



            I would review PEP 8. Some of your style choices are not considered best practice by the Python community. Some quick observations:



            1. Constants are given CAPS_WITH_UNDERSCORES. Not function/method parameters. PATH should be path for instance.

            2. There is a space between the binary operators (there are, however, some exceptions: see Other Recommendations). So, for instance: indentation=4 should be indentation = 4.

            3. Instead of if not (args.out==None):, You should do if args.out is not None: (See Programming Recommendations)

            4. I would advise making a main function. Yes if __name__ == '__main__': is a start but I would recommend having a main function (see this answer, in particular the section "An Even Better Way"):

            --



            def main(): 
            parser=argparse.ArgumentParser(...)
            ...

            if __name__ == '__main__':
            main()





            share|improve this answer
























              up vote
              7
              down vote



              accepted










              PEP 8



              I would review PEP 8. Some of your style choices are not considered best practice by the Python community. Some quick observations:



              1. Constants are given CAPS_WITH_UNDERSCORES. Not function/method parameters. PATH should be path for instance.

              2. There is a space between the binary operators (there are, however, some exceptions: see Other Recommendations). So, for instance: indentation=4 should be indentation = 4.

              3. Instead of if not (args.out==None):, You should do if args.out is not None: (See Programming Recommendations)

              4. I would advise making a main function. Yes if __name__ == '__main__': is a start but I would recommend having a main function (see this answer, in particular the section "An Even Better Way"):

              --



              def main(): 
              parser=argparse.ArgumentParser(...)
              ...

              if __name__ == '__main__':
              main()





              share|improve this answer






















                up vote
                7
                down vote



                accepted







                up vote
                7
                down vote



                accepted






                PEP 8



                I would review PEP 8. Some of your style choices are not considered best practice by the Python community. Some quick observations:



                1. Constants are given CAPS_WITH_UNDERSCORES. Not function/method parameters. PATH should be path for instance.

                2. There is a space between the binary operators (there are, however, some exceptions: see Other Recommendations). So, for instance: indentation=4 should be indentation = 4.

                3. Instead of if not (args.out==None):, You should do if args.out is not None: (See Programming Recommendations)

                4. I would advise making a main function. Yes if __name__ == '__main__': is a start but I would recommend having a main function (see this answer, in particular the section "An Even Better Way"):

                --



                def main(): 
                parser=argparse.ArgumentParser(...)
                ...

                if __name__ == '__main__':
                main()





                share|improve this answer












                PEP 8



                I would review PEP 8. Some of your style choices are not considered best practice by the Python community. Some quick observations:



                1. Constants are given CAPS_WITH_UNDERSCORES. Not function/method parameters. PATH should be path for instance.

                2. There is a space between the binary operators (there are, however, some exceptions: see Other Recommendations). So, for instance: indentation=4 should be indentation = 4.

                3. Instead of if not (args.out==None):, You should do if args.out is not None: (See Programming Recommendations)

                4. I would advise making a main function. Yes if __name__ == '__main__': is a start but I would recommend having a main function (see this answer, in particular the section "An Even Better Way"):

                --



                def main(): 
                parser=argparse.ArgumentParser(...)
                ...

                if __name__ == '__main__':
                main()






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Sep 2 at 5:54









                Dair

                4,208727




                4,208727



























                     

                    draft saved


                    draft discarded















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function ()
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f202968%2fpython-tool-to-assemble-codereview-posts-from-source-files%23new-answer', 'question_page');

                    );

                    Post as a guest













































































                    Xe Kn3yqh5 7c4JpNydo1mf6 Br YQ0nc19M MkNSrNLFtI MqzMrQHGVGFla
                    GeBredZi,8gYMrwo3sI9vst1EhXr N,y uV,LwFTl

                    這個網誌中的熱門文章

                    How to combine Bézier curves to a surface?

                    Propositional logic and tautologies

                    Distribution of Stopped Wiener Process with Stochastic Volatility