Python Notes

1. input( )

Python 3.any's input( ) works like 2.any's raw_input(), i.e., it returns a string.

2. sys.argv[] : 命令提示字元引數

>>> python somefile.py somewords
//sys.argv[1]==somewords

https://openhome.cc/Gossip/Python/IOABC.html

3. exit( )們 :

exit()/quit()

拋出 SystemExit 異常. 一般在交互式 Shell 中退出時使用.

sys.exit(n)

退出程序引發 SystemExit 異常, 可以捕獲異常執行些清理工作. n 默認值為 0, 表示正常退出. 其他都是非正常退出. 還可以 sys.exit(“sorry, goodbye!”); 一般主程序中使用此退出.

os._exit(n)

直接退出, 不拋異常, 不執行相關清理工作. 常用在子進程的退出.

http://jaminzhang.github.io/python/exit-and-sys-exit-in-python/

4. 字串處理精解 :

http://itman2266.blogspot.tw/2013/04/python_22.html

5. 去掉 unicode 字串前面的 u :

In [4]: u'\xe4\xbd\xa0\xe5\xa5\xbd'.encode('raw_unicode_escape')
Out[4]: '\xe4\xbd\xa0\xe5\xa5\xbd'

In [5]: u'\xe4\xbd\xa0\xe5\xa5\xbd'.encode('raw_unicode_escape').decode('utf8')
Out[5]: u'\u4f60\u597d'

In [7]: print u'\u4f60\u597d'
你好

https://mozillazg.github.io/2013/12/python-raw-unicode.html

6. UnicodeDecodeError: 解決方法 :

  • 1.全都轉byte string
self.response.out.write("你好"+self.request.get("argu").encode('utf-8'))
  • 2.全都轉unicode string
self.response.out.write(u"你好"+self.request.get("argu"))

P.S.資料庫存入和讀取以及self.request拿到的參數預設就都是unicode string,若是要把byte string轉unicode string可以這樣轉unicode(unicodestring,"utf-8")

這樣就再也不會有
"UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)"
的問題產生了 遇到噴出這種錯誤幾乎都可以用這2種方法解決

print p1.extractText().encode('utf8')

http://blog.wahahajk.com/2009/08/unicodedecodeerror-ascii-codec-cant.html

7. eval( ) txt讀完檔案可以轉成list之類有用的值,不然string沒辦法直接用 :

內建函數 (function) eval() ,參數 (parameter) expression 為具有可執行運算式的字串,此函數執行 expression 中的運算式

8. 原來raw_input( )吃的是Big5 ! :

解決方法

name = raw_input()
print name.decode("big5")

註 : 由flask的url取得的中文字串完全不需重新編碼,已經是utf8了

9. 正規表示式_中文解法 :

reg=re.compile(r'(^[\u4e00-\u9fa5]+)-([\u4e00-\u9fa5]+$)')
reg.search(u'錦繡-復興北村'.encode('raw_unicode_escape')).group()

BUT 雙反斜線問題QQ

>>> reg=re.compile(r'([\u4e00-\u9fa5]+)-([\u4e00-\u9fa5]+)')
>>> reg.search('\u5566-\u5566').group()
'\\u5566-\\u5566'
>>> reg.search(u'錦繡-復興北村'.encode('raw_unicode_escape')).group()
'\\u9326\\u7e61-\\u5fa9\\u8208\\u5317\\u6751'
>>> reg.search(u'錦繡-復興北村'.encode('raw_unicode_escape')).group(1)
'\\u9326\\u7e61'
>>> ans=reg.search(u'錦繡-復興北村'.encode('raw_unicode_escape')).group()
>>> ans
'\\u9326\\u7e61-\\u5fa9\\u8208\\u5317\\u6751'
>>> ans.encode('utf8')
'\\u9326\\u7e61-\\u5fa9\\u8208\\u5317\\u6751'
>>> ans.decode('utf8')
u'\\u9326\\u7e61-\\u5fa9\\u8208\\u5317\\u6751'
>>> print ans.decode('utf8')

>>> ans=reg.search(ur'錦繡-復興北村'.encode('raw_unicode_escape')).group()
>>> print ans.decode('utf8')
\u9326\u7e61-\u5fa9\u8208\u5317\u6751
>>> ans.decode('utf8')
u'\\u9326\\u7e61-\\u5fa9\\u8208\\u5317\\u6751'

結論 : 還無法解決QQ
直接用for i in <string>:來找好像比較快QQ

10. TypeError: 'int' object has no attribute '__getitem__'

雙重迴圈中若不慎使用同一個i作為iterative,會導致在小迴圈結束之後的i值或是屬性改變,再回到大迴圈時出現像這樣的error

11. PyPDF2 -> mergePage

>>> www=wm.getPage(0)
>>> p1.mergePage(www)
>>> qq.addPage(p1)
# -> 分開弄可以
>>> qq.addPage(p1.mergePage(www))
# -> 但請不要合在同一行,會挫屎
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Users\Jexus\Documents\MIT\newenv\lib\site-packages\PyPDF2\pdf.py", line 138, in addPage
    self._addPage(page, list.append)
  File "C:\Users\Jexus\Documents\MIT\newenv\lib\site-packages\PyPDF2\pdf.py", line 123, in _addPage
    assert page["/Type"] == "/Page"
TypeError: 'NoneType' object has no attribute '__getitem__'

12. cProfile.run

https://zwindr.blogspot.tw/2016/08/python-cprofile.html

13. OpenSSL.SSL.Error:

解決方法

from backports import ssl
from imapclient import IMAPClient

context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)

imapObj = IMAPClient('imap.gmail.com', ssl=True, ssl_context=context)

https://stackoverflow.com/questions/34780726/imapclient-error-diff-version-python-and-windows

14.Flusk佈署到內網

調用的時候一般是app.run()
但是這樣默認的地址是http://127.0.0.1:5000只能本機訪問
可以這樣調用app.run(host='192.168.1.2')
host裡面要打真實內網ip位置
這樣訪問地址是http://192.168.1.2:5000

https://windard.com/project/2016/12/01/Deploy-Flask-APP
https://www.phpbulo.com/archives/900.html

15.工作站無法sudo又沒裝pip

wget https://github.com/pypa/virtualenv/archive/15.0.3.tar.gz
tar xvf 15.0.3.tar.gz
python3 15.0.3/virtualenv.py venvname

https://github.com/vinaymodi/notes/wiki/Python-virtualenv-without-sudo

16.tensorflow看GPU

from tensorflow.python.client import device_lib
device_lib.list_local_devices()
# cpu
cat /proc/cpuinfo

17. dict setdefault

dictionary = {} dictionary.setdefault("list", []).append("list_item")

18.print sorted dict

dict([(k,di[k]) for k in sorted(di)])

19.Cuda runtime error (59)

RuntimeError: cuda runtime error (59) : device-side assert triggered at /pytorch/aten/src/THC/generic/THCStorage.cpp:36

非常可能是 loss function 弄 cross-entropy 的時候,index 超出範圍了

查看我的其他筆記 — — 回到 Jexus.md 首頁