Good afternoon Fillmore, > So, now I need to split a string in a way that the first element > goes into a string and the others in a list: > > while($line = <STDIN>) { > > my ($s,@values) = split /\t/,$line; > > I am trying with: > > for line in sys.stdin: > s,values = line.strip().split("\t") > print(s) > > but no luck: > > ValueError: too many values to unpack (expected 2)
That means that the number of items on the right hand side of the assignment (returned from the split() call) did not match the number of variables on the left hand side. > What's the elegant python way to achieve this? Are you using Python 3? s = 'a,b,c,d,e' p, *remainder = s.split(',') assert isinstance(remainder, list) Are you using Python 2? s = 'a,b,c,d,e' remainder = s.split(',') assert isinstance(remainder, list) p = remainder.pop(0) Aside from your csv question today, many of your questions could be answered by reading through the manual documenting the standard datatypes (note, I am assuming you are using Python 3). https://docs.python.org/3/library/stdtypes.html It also sounds as though you are applying your learning right away. If that's the case, you might also benefit from reading through all of the services that are provided in the standard library with Python: https://docs.python.org/3/library/ In terms of thinking Pythonically, you may benefit from: The Python Cookbook (O'Reilly) http://shop.oreilly.com/product/0636920027072.do Python Module of the Week https://pymotw.com/3/ I'm making those recommendations because I know and have used these and also because of your Perl background. Good luck, -Martin -- Martin A. Brown http://linux-ip.net/ -- https://mail.python.org/mailman/listinfo/python-list