Hi All , I tried the following code :
parser = argparse.ArgumentParser() parser.add_argument("first") parser.add_argument("second", nargs="?") args = parser.parse_args() print("first:", args.first) print("second:", args.second) When I execute the script it gives error : python python_json_20001_oratest_v1.py "file1" ('first:', 'file1') ('second:', None) Traceback (most recent call last): File "test.py", line 211, in <module> with open(args.second, 'r') as f : TypeError: coercing to Unicode: need string or buffer, NoneType found if I see in line number 211 it with open(args.second, 'r') as f : try : with open(args.second, 'r') as f : for line in f: print line except IOError: print "The default error is err-1 because file2 was not provided " Does that mean my try and except block is not working because if args.second is None as in this case then it should print "The default error is err-1 because file2 was not provided " Please advice , Thanks, > ---------- Forwarded message ---------- > From: Peter Otten <__pete...@web.de> > To: tutor@python.org > Cc: > Bcc: > Date: Sun, 27 Jan 2019 10:30:12 +0100 > Subject: Re: [Tutor] python - files > Cameron Simpson wrote: > > > Mats has mentioned the modules getopt and argparse etc. These are > > primarily aimed at option parsing ("-v", "-o foo"). Your situation > > occurs _after_ the option parsing (in your case, there are no options). > > Not argparse. The main advantage over optparse is its handling of > positional > arguments. Your custom logic > > > def main(argv): > > cmd = argv.pop(0) # collect the command word > > badopts = False > > # mandatory first argument > > if not argv: > > print("%s: missing first argument" % cmd, file=sys.stderr) > > badopts = True > > else: > > first = argv.pop(0) > > # optional second argument > > if argv: > > second = argv.pop(0) # explicit argument 2, use it > > else: > > second = None # or some otherdefault > > if argv: > > print("%s: extra arguments: %r" % (cmd, argv), file=sys.stderr) > > badopts = true > > if badopts: > > print("%s: invalid invocation, aborting" % cmd, file=sys.stderr) > > return 2 > > ... work with first and second ... > > can roughly be replicated with the two lines > > parser.add_argument("first") > parser.add_argument("second", nargs="?") > > A working script: > > $ cat test.py > #!/usr/bin/python3 > import argparse > > def main(): > parser = argparse.ArgumentParser() > > parser.add_argument("first") > parser.add_argument("second", nargs="?") > > args = parser.parse_args() > > print("first:", args.first) > print("second:", args.second) > > if __name__ == "__main__": > main() > > $ ./test.py > usage: test.py [-h] first [second] > test.py: error: the following arguments are required: first > > $ ./test.py -h > usage: test.py [-h] first [second] > > positional arguments: > first > second > > optional arguments: > -h, --help show this help message and exit > > $ ./test.py ONE > first: ONE > second: None > > $ ./test.py ONE TWO > first: ONE > second: TWO > > $ ./test.py ONE TWO THREE > usage: test.py [-h] first [second] > test.py: error: unrecognized arguments: THREE > > Argparse makes a usable standard command line interface easy to set up (if > you need non-standard behaviour it gets a bit harder). > > There is also a companion module argcomplete (not in the stdlib) that > enables autocompletion. > > > > > > > ---------- Forwarded message ---------- > From: Cameron Simpson <c...@cskk.id.au> > To: tutor@python.org > Cc: > Bcc: > Date: Sun, 27 Jan 2019 20:54:13 +1100 > Subject: Re: [Tutor] python - files > On 27Jan2019 10:30, Peter Otten <__pete...@web.de> wrote: > >Cameron Simpson wrote: > >> Mats has mentioned the modules getopt and argparse etc. These are > >> primarily aimed at option parsing ("-v", "-o foo"). Your situation > >> occurs _after_ the option parsing (in your case, there are no options). > > > >Not argparse. The main advantage over optparse is its handling of > positional > >arguments. > > I stand corrected. > > >Your custom logic > [...] > >can roughly be replicated with the two lines > > > >parser.add_argument("first") > >parser.add_argument("second", nargs="?") > >[... extended example ...] > > Thank you! > > Cheers, > Cameron Simpson <c...@cskk.id.au> > > > > > ---------- Forwarded message ---------- > From: Marco Mistroni <mmistr...@gmail.com> > To: mhysnm1...@gmail.com > Cc: tutor@python.org > Bcc: > Date: Sun, 27 Jan 2019 10:46:06 +0000 > Subject: Re: [Tutor] Web scraping using selenium and navigating nested > dictionaries / lists. > Hi my 2 cents. Have a look at scrapy for scraping.selenium is v good tool > to learn but is mainly to automate uat of guis > Scrapy will scrape for you and u can automate it via cron. It's same stuff > I am doing ATM > Hth > > On Sun, Jan 27, 2019, 8:34 AM <mhysnm1...@gmail.com wrote: > > > All, > > > > > > > > Goal of new project. > > > > I want to scrape all my books from Audible.com that I have purchased. > > Eventually I want to export this as a CSV file or maybe Json. I have not > > got > > that far yet. The reasoning behind this is to learn selenium for my > work > > and get the list of books I have purchased. Killing two birds with one > > stone > > here. The work focus is to see if selenium can automate some of the > > testing I have to do and collect useful information from the web page for > > my > > reports. This part of the goal is in the future. As I need to build my > > python skills up. > > > > > > > > Thus far, I have been successful in logging into Audible and showing the > > library of books. I am able to store the table of books and want to use > > BeautifulSoup to extract the relevant information. Information I will > want > > from the table is: > > > > * Author > > * Title > > * Date purchased > > * Length > > * Is the book in a series (there is a link for this) > > * Link to the page storing the publish details. > > * Download link > > > > Hopefully this has given you enough information on what I am trying to > > achieve at this stage. AS I learn more about what I am doing, I am adding > > possible extra's tasks. Such as verifying if I have the book already > > download via itunes. > > > > > > > > Learning goals: > > > > Using the BeautifulSoup structure that I have extracted from the page > > source for the table. I want to navigate the tree structure. > BeautifulSoup > > provides children, siblings and parents methods. This is where I get > stuck > > with programming logic. BeautifulSoup does provide find_all method plus > > selectors which I do not want to use for this exercise. As I want to > learn > > how to walk a tree starting at the root and visiting each node of the > tree. > > Then I can look at the attributes for the tag as I go. I believe I have > to > > set up a recursive loop or function call. Not sure on how to do this. > > Pseudo > > code: > > > > > > > > Build table structure > > > > Start at the root node. > > > > Check to see if there is any children. > > > > Pass first child to function. > > > > Print attributes for tag at this level > > > > In function, check for any sibling nodes. > > > > If exist, call function again > > > > If no siblings, then start at first sibling and get its child. > > > > > > > > This is where I get struck. Each sibling can have children and they can > > have > > siblings. So how do I ensure I visit each node in the tree? > > > > Any tips or tricks for this would be grateful. As I could use this in > other > > situations. > > > > > > > > Sean > > > > _______________________________________________ > > Tutor maillist - Tutor@python.org > > To unsubscribe or change subscription options: > > https://mail.python.org/mailman/listinfo/tutor > > > > _______________________________________________ > Tutor maillist - Tutor@python.org > https://mail.python.org/mailman/listinfo/tutor > -- Asad Hasan +91 9582111698 _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor