Well, I guess I was able to goad the sleepyhead to up his game! ;) Thanks for the upgrade!
David T. On August 13, 2026 2:48:23 AM GMT+05:30, Kalpesh Patel <[email protected]> wrote: >David – yeah I think the guy that wrote the script was probably sleep deprived >when he did it 😊 …. here is the one that meets new requirements as well as a >bit more 😊. > > > >Since spacing matters in Python, attached one should fully run if saved as a >file. > > > ># --- Start of script --- > >from lxml import etree > >import gzip > >import sys > > > >onlyMultiple = True > > > >if len(sys.argv) > 2: > > if "all" in sys.argv[2].lower(): > > onlyMultiple = False > > > >if len(sys.argv) > 1: > > data_file = sys.argv[1] > >else: > > print ("\nProvide one or two positional parameters:") > > print (" File name as the first argument.") > > print (" Optional second argument: 'all' to display all tickers, not > just those with multiple namespaces.\n") > > exit() > > > >namespaces = dict() > > > >try: > > with gzip.open(data_file, "rb") as f: > > context = etree.iterparse(f, > tag='{http://www.gnucash.org/XML/gnc}commodity') > > > > for event, elem in context: > > symbol = elem[1].text > > namespace = elem[0].text > > elem.clear() > > > > if symbol in namespaces: > > > namespaces[symbol] = namespaces[symbol] + ", " +namespace > > else: > > > namespaces[symbol] = namespace > > > > for ticker in sorted(namespaces.keys()): > > if onlyMultiple: > > if > namespaces[ticker].count(",") > 0: > > print > ("{}:{}".format(ticker, namespaces[ticker])) > > else: > > print ("{}:{}".format(ticker, > namespaces[ticker])) > > > >except Exception as e: > > print ("Error: {}".format(e)) > ># --- End of script --- > > > > > > > > > >From: David T. <[email protected]> >Sent: Wednesday, August 12, 2026 2:06 AM >To: [email protected]; Kalpesh Patel <[email protected]>; 'Wm Tarr' ><[email protected]> >Subject: Re: [GNC] Trading accounts > > > >Kalpesh, > >It is nice to see how a user could use Python to get at this information, but >it seems to me that having to supply a list of symbols to the script defeats >the point of trying to find those symbols that have secondary namespaces. > >I wonder whether there is a Python analog for "find all securities that are >not currencies" that Wm provided in his SQL... > >David > > > >On August 12, 2026 3:13:55 AM GMT+05:30, Kalpesh Patel <[email protected] ><mailto:[email protected]> > wrote: > >Script attached in-case spaces gets munged up by the list server which I >already show done so. > >-----Original Message----- >From: Kalpesh Patel <[email protected] <mailto:[email protected]> > >Sent: Tuesday, August 11, 2026 4:34 PM >To: 'Wm Tarr' <[email protected] <mailto:[email protected]> >; >'[email protected]' <[email protected] ><mailto:[email protected]> > >Subject: RE: [GNC] Trading accounts > >Here is the Python script that will do so. You'll need to provide full path to >your compressed XML data file as the first argument, followed by list of >symbols to find namespace(s) for. All parameters separated by one or more >spaces. > >Example >c:\CloudDrives\OneDrive\QuickenStuff\HELPERS>python display_namespaces.py >c:\data\gnucash\example.gnucash NANC NANC:CBOE NANC:CBOE - US > >You will need Python 3.X installed, along with lxml and gzip libraries >installed in Python for the script to work. You would copy & paste everything >between '# ---' delimiters to a file for a fully running script. > >Now you have both ways to do it. Hope these helps. > > ># --- Start of Script >from lxml import etree >import gzip >import sys > >if len(sys.argv) > 2: > tickers = [ticker.strip() for ticker in sys.argv[2:]] > data_file = sys.argv[1] >else: > print ("\nProvide two positional parameters:") > print (" File name as the first.") > print (" Specify one or more tickers as second and onward separated by a > space.") > exit() > >with gzip.open(data_file, "rb") as f: > context = etree.iterparse(f, > tag='{http://www.gnucash.org/XML/gnc}commodity') > > for event, elem in context: > > symbol = elem[1].text > namespace = elem[0].text > elem.clear() > > if any(symbol.lower() == ticker.lower() for ticker in tickers): > print ("{}:{}".format(symbol, namespace)) # --- End of > Script > >-----Original Message----- >From: Wm Tarr <[email protected] <mailto:[email protected]> > >Sent: Monday, August 10, 2026 12:56 PM >To: [email protected] <mailto:[email protected]> >Subject: Re: [GNC] Trading accounts > >I don't think you can do it in gnc but here is some SQL that does it > > > _____ > >with m_cnt as ( > >select mnemonic, count(*) as cnt > >from commodities > >group by mnemonic > >having cnt > 1 > >) > >select namespace, mnemonic > >from commodities > >where mnemonic in (select mnemonic from m_cnt) > >; > > > _____ > >Wm > >On 2026-08-10 01:36, Fred Tydeman wrote: > > > Anyone know of a way to find stocks in more than one Namespace? > > > _______________________________________________ gnucash-user mailing list [email protected] To update your subscription preferences or to unsubscribe: https://lists.gnucash.org/mailman/listinfo/gnucash-user ----- Please remember to CC this list on all your replies. You can do this by using Reply-To-List or Reply-All.
