Does any assigned variable equal(==) to an "raw_input()" in Python2? - python-2.7

The "raw_input" is generally used for taking a respond of prompt to a string, and then it can be also assigned(=) by a variable.
But I found something strange(for me) and can't well understand. In a mistake incident case(see example below), I put a equal(==) for assigning variable in a function. Then I run it in interpreter and didn't have any error. I through my script was well done but it could not work as my expert.
My questions:
I would like to know this usage of "raw_input" in Python is correct?
If yes, how we use it?
If not, why don't interpreter give us a error warning?
Thank you so much.
Example:
Python 2.7.3 (default, Apr 24 2012, 00:00:54)
[GCC 4.7.0 20120414 (prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> v = "Variable"
>>> def test():
... v == raw_input(">")
... print v
...
>>> test()
>Hello!
Variable
>>>

This:
v == raw_input(">")
is simply a comparison. You get True or False as a result and then throw it away, because you don't give it a name. You could write
comparison = v == raw_input(">")
print comparison
to see the value.

Related

I want to use the openslide functionality in pyvips

I tried to use both openslide and pyvips and my application doesn't find the necesary .dll. I think it is a problem of using both librarys.
I have read that pyvips has openslide embed but I can't find how to use it. The main purpose for this is to read Whole Slide Images and see the different levels and augmentations, and work with them.
I'd really appreciate your help! Thank you
Yes, pyvips usually includes openslide, so you can't use both together.
Use .get_fields() to see all the metadata on an image, for example:
$ python3
Python 3.9.7 (default, Sep 10 2021, 14:59:43)
[GCC 11.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pyvips
>>> x = pyvips.Image.new_from_file("openslide/CMU-1.svs")
>>> x.width
46000
>>> x.height
32914
>>> x.get_fields()
['width', 'height', 'bands', 'format', 'coding', 'interpretation', 'xoffset', 'yoffset',
'xres', 'yres', 'filename', 'vips-loader', 'slide-level', 'aperio.AppMag', 'aperio.Date',
'aperio.Filename', 'aperio.Filtered', 'aperio.Focus Offset', 'aperio.ICC Profile',
'aperio.ImageID', 'aperio.Left', 'aperio.LineAreaXOffset', 'aperio.LineAreaYOffset',
...
pyvips will open base level of the image by default (the largest), use level= to pick other levels, perhaps:
>>> x = pyvips.Image.new_from_file("openslide/CMU-1.svs", level=2)
>>> x.width
2875
See the docs for details:
https://www.libvips.org/API/current/VipsForeignSave.html#vips-openslideload

print non ascii text in python

I am using python2 and I want to convert the non utf-8 text into readable string. I am trying decode using latin-1 and utf-8 also. But I am getting no success.
This is the string
s = ' ¤¿à¤²à¤¾ मेंदान रोड़ इंदौर'
I tried:
s.decode('utf-8')
I am getting following output:
u' \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbf\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb2\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbe \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xae\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\xa2\xc2\u20ac\xc2\xa1\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\u0161\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa6\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbe\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa8 \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb0\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\xa2\xc2\u20ac\xc2\xb9\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\u2026\xc2\u201c \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\xa1\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\u0161\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa6\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\u2026\xc2\u2019\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb0'
The above output is still non-readable.
Any help would be highly appreciated
First thing first: you MUST read this, no excuse.
Once done, you'll understand that trying to decode a byte string to unicode without knowing the original encoding is mostly a waste of time.
Second point: this (shortened for readability):
u' \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbf\xc3\u0192\xc2 '
is Python's inner representation of the unicode string - you'd get something similar by displaying the inner representation of your byte string:
$ python
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "¤¿à¤²ÃÂ"
>>> s # internal representation
'\xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xa4\xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xbf\xc3\x83\xc6\x92\xc3\x82 \xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xa4\xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xb2\xc3\x83\xc6\x92\xc3\x82'
>>> print(s) # readable output
¤¿à¤²ÃÂ
So your only issue here is confusing the internal representation with the "human-visible" output
Now note that how the string will ultimately be displayed to the user depends on the software doing the rendering (your xterm or equivalent if running python from command line and printing to stdout, your browser if rendering this as part of a server-side generated HTTP response, etc etc) and system settings, all of which are outside Python's responsabilities.

How can I decode MACCYRILLIC using python?

I would like to decode MACCYRILLIC code, for example "%EE%F2_%E4%EE%E1%F0%E0_%E4%EE%E1%F0%E0_%ED%E5_%E8%F9%F3%F2". How can I do it using Python2?
phrase.decode("MACCYRILLIC") has no effect.
urllib — Open arbitrary resources by URL
urllib.unquote(string)
Replace %xx escapes by their single-character equivalent.
Example: unquote('/%7Econnolly/') yields '/~connolly/'.
==> py -2
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import urllib
>>> MACCYRILLIC = "%EE%F2_%E4%EE%E1%F0%E0_%E4%EE%E1%F0%E0_%ED%E5_%E8%F9%F3%F2"
>>> print urllib.unquote(MACCYRILLIC).decode('cp1251')
от_добра_добра_не_ищут
>>>
Edit. Another approach (step by step):
==> py -2
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib
>>> import codecs
>>> MACCYRILLIC = '%EE%F2_%E4%EE%E1%F0%E0_%E4%EE%E1%F0%E0_%ED%E5_%E8%F9%F3%F2'
>>> #print
... x = urllib.unquote(MACCYRILLIC) #.decode('cp1251')
>>> print repr(x)
'\xee\xf2_\xe4\xee\xe1\xf0\xe0_\xe4\xee\xe1\xf0\xe0_\xed\xe5_\xe8\xf9\xf3\xf2'
>>> y = codecs.decode(x, 'cp1251')
>>> print y
от_добра_добра_не_ищут
>>>
All above would work on the following requirement:
>>> import sys
>>> sys.stdout.encoding
'utf-8'
>>> print sys.stdout.encoding
utf-8
>>>
Unfortunately, the example in http://rextester.com/XAX79891 shows sys.stdout.encoding None (and I don't know a way of changing it to utf-8). Read more in Lennart Regebro's answer to Stdout encoding in python:
A better generic solution under Python 2 is to treat stdout as what
it is: An 8-bit interface. And that means that anything you print to
to stdout should be 8-bit. You get the error when you are trying to
print Unicode data, because print will then try to encode the Unicode
data to the encoding of stdout, and if it's None it will assume
ASCII, and fail, unless you set PYTHONIOENCODING.

How to extract coordinates(lat, lan) from a URL in Python?

I'm a bit lost on how to extract coordinates (Lat, Long) from a URL in Python.
Always I'll recive a url like this:
https://www.testweb.com/cordi?ll=41.403781,2.1896&z=17&pll=41.403781,2.1896
Where I need to extract the second set of this URL (in this case: 41.403781,2.1896) Just to say, that not always the first and second set of coords will be the same.
I know, that can be done with some regex, but I'm not good enough on it.
Here's how to do it with a regular expression:
import re
m = re.search(r'pll=(\d+\.\d+),(\d+\.\d+)', 'https://www.testweb.com/cordi?ll=41.403781,2.1896&z=17&pll=41.403781,2.1896')
print m.groups()
Result: ('41.403781', '2.1896')
You might want look at the module urlparse for a more robust solution.
urlparse has a functions "urlparse" and "parse_qs" for accessing this data reliably, as shown below
$ python
Python 2.6.6 (r266:84292, Jul 23 2015, 15:22:56)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> u="""https://www.testweb.com/cordi?ll=41.403781,2.1896&z=17&pll=41.403781,2.1896"""
>>> import urlparse
>>> x=urlparse.urlparse(u)
>>> x
ParseResult(scheme='https', netloc='www.testweb.com', path='/cordi', params='', query='ll=41.403781,2.1896&z=17&pll=41.403781,2.1896', fragment='')
>>> x.query
'll=41.403781,2.1896&z=17&pll=41.403781,2.1896'
>>> urlparse.parse_qs(x.query)
{'ll': ['41.403781,2.1896'], 'z': ['17'], 'pll': ['41.403781,2.1896']}
>>>

how to mock subprocess.call in a unittest

I'm on python 3.3 and I have to test a method which use call from subprocess.py.
I tried:
subprocess.call = MagicMock()
with patch('subprocess.call') as TU_call:
but in debug mode I found that python call effectively subprocess.call
Works fine for me (Ubuntu 13.04, Python 3.3.1):
$ python3.3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import mock
>>> import subprocess
>>> result = subprocess.call('date')
Fri Jan 3 19:45:32 CET 2014
>>> subprocess.call = mock.create_autospec(subprocess.call, return_value='mocked!')
>>> result = subprocess.call('date')
>>> print(result)
mocked!
>>> subprocess.call.mock_calls
[call('date')]
I believe this question is about the usage of this particular mock package
General statements, unrelated to your direct question
Wrote this up before I understood that the question is specifically about the use of the python mock package.
One general way to mock functions is to explicitly redefine the function or method:
$ python3.3
Python 3.3.1 (default, Sep 25 2013, 19:29:01)
[GCC 4.7.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call('date')
Fri Jan 3 19:23:25 CET 2014
0
>>> def mocked_call(*a, **kw):
... return 'mocked'
...
>>> subprocess.call = mocked_call
>>> subprocess.call('date')
'mocked'
The big advantage of this straightforward approach is that this is free of any package dependencies. The disadvantage is that if there are specific needs, all the decision making logic has to be coded manually.
As an example of mocking packages, FlexMock is available for both Python 2.7 and Python 3.* and its usage of overriding subprocess.call is discussed in this question
This work for subprocess.check_output in python3
#mock.patch('subprocess.check_output', mock.mock_open())
#mock.patch('subprocess.Popen.communicate')
def tst_prepare_data_for_matrices(self, makedirs_mock, check_output_mock):
config_file = open(os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir)+'/etc/test/config.json')).read()
check_output_mock.return_value = ("output", "Error")