{"id":1494,"date":"2014-10-17T16:20:03","date_gmt":"2014-10-17T16:20:03","guid":{"rendered":"http:\/\/ixyzero.com\/blog\/?p=1494"},"modified":"2014-10-17T16:20:03","modified_gmt":"2014-10-17T16:20:03","slug":"%e4%b8%80%e4%ba%9bpython%e7%89%87%e6%ae%b5_5","status":"publish","type":"post","link":"https:\/\/ixyzero.com\/blog\/archives\/1494.html","title":{"rendered":"\u4e00\u4e9bPython\u7247\u6bb5_5"},"content":{"rendered":"<h6>1.\u83b7\u5f97\u7528\u6237\u548c\u7ec4\u4fe1\u606f<\/h6>\n<pre class=\"lang:default decode:true\">#! \/usr\/bin\/env python\n#-*- coding: utf-8 -*-\n'''\u83b7\u5f97\u7528\u6237\u548c\u7ec4\u4fe1\u606f'''\nimport os, stat\n\ndef WalkDir(dir, file_callback=None):\n    for root, dirs, files in os.walk(dir):\n        for d in dirs:\n            #print d\n            if(not d[0] == \".\"):\n                file_path = os.path.join(root, d)\n                if file_callback: file_callback(file_path)\n\n    for root, dirs, files in os.walk(dir):\n        for f in files:\n            #print f\n            if(not f[0] == \".\"):\n                file_path = os.path.join(root, f)\n                if file_callback: file_callback(file_path)\n\ndef LogFile(file):\n    try:\n        fileStats = os.stat(file)\n        #print file\n        #print fileStats.st_mode\n        #print oct(stat.S_IMODE(fileStats.st_mode))\n        #print fileStats.st_uid\n        #print fileStats.st_gid\n        fileInfo = 'chown ' +  str(fileStats.st_uid) +':' + str(fileStats.st_gid) + ' ' + file\n        print fileInfo\n    except:\n        pass\n\nif __name__ == \"__main__\":\n    path = raw_input('Please input a path to do the test: ')\n    WalkDir(path, LogFile)<\/pre>\n<h6>2.\u83b7\u5f97\u6587\u4ef6\u6216\u8005\u6587\u4ef6\u5939\u6743\u9650<\/h6>\n<pre class=\"lang:default decode:true \">#! \/usr\/bin\/env python\n#-*- coding: utf-8 -*-\n'''\u83b7\u5f97\u6587\u4ef6\u6216\u8005\u6587\u4ef6\u5939\u6743\u9650 '''\nimport os, stat\n\ndef WalkDir(dir, file_callback=None):\n    for root, dirs, files in os.walk(dir):\n        for d in dirs:\n            #print d\n            if(not d[0] == \".\"):\n                file_path = os.path.join(root, d)\n                if file_callback: file_callback(file_path)\n\n    for root, dirs, files in os.walk(dir):\n        for f in files:\n            #print f\n            if(not f[0] == \".\"):\n                file_path = os.path.join(root, f)\n                if file_callback: file_callback(file_path)\n\ndef LogFile(file):\n    try:\n        fileStats = os.stat(file)\n        #print file\n        #print fileStats.st_mode\n        #print oct(stat.S_IMODE(fileStats.st_mode))\n        #print fileStats.st_uid\n        #print fileStats.st_gid\n        fileInfo = 'chmod ' +  oct(stat.S_IMODE(fileStats.st_mode)) + ' ' + file\n        print fileInfo\n    except:\n        pass\n\nif __name__ == \"__main__\":\n    path = raw_input('Please input a path to do the test: ')\n    WalkDir(path, LogFile)<\/pre>\n<h6>3.\u67e5\u627e\u5927\u6587\u4ef6<\/h6>\n<pre class=\"lang:default decode:true\">#!\/usr\/bin\/env python\n# coding=utf-8\nimport os\nimport os.path\nimport stat\nimport sys\n\ndef new_queue():\n    #the dummy head\n    h =  {  \"item\": None,\n            \"prev\": None,\n            \"next\": None\n            }\n    h[\"prev\"] = h;\n    h[\"next\"] = h;\n    return h\n\ndef queue_put(h, item):\n    p = h[\"prev\"]\n    node = {\n            \"item\": item,\n            \"prev\": p,\n            \"next\": h\n            }\n    p[\"next\"] = node\n    h[\"prev\"] = node\n\ndef queue_get(h):\n    if h[\"next\"] == h:\n        return\n    p = h[\"next\"]\n    h[\"next\"] = p[\"next\"]\n    h[\"next\"][\"prev\"] = h\n    return p[\"item\"]\n\ndef queue_isempty(h):\n    if h[\"next\"] == h:\n        return True\n    else:\n        return False\n\ndef travfs_level_order(d):\n    if d.startswith(\".\"):\n        return\n    s = []\n    q = new_queue()\n    queue_put(q, d)\n    while not queue_isempty(q):\n        fi = queue_get(q)\n        try:\n            st = os.stat(fi)\n        except:\n            continue\n        if stat.S_ISDIR(st.st_mode):\n            s.append((fi, st.st_size))\n            try:\n                sub = os.listdir(fi)\n            except:\n                continue\n            for i in sub:\n                queue_put(q, os.path.join(fi, i))\n        else:\n            try:\n                size = os.stat(fi).st_size\n            except:\n                continue\n            s.append((fi, size))\n    return s\n\nK = 1024\nM = K * K\nG = M * K\n\ndef pretty_size(size):\n    if size \/ G:\n        return str(size \/ G) + \"G\"\n    elif size \/ M:\n        return str(size \/ M) + \"M\"\n    elif size \/ K:\n        return str(size \/ K) + \"K\"\n    else:\n        return str(size) + \"B\"\n\ndef sort_files(s):\n    s.sort(key = lambda x: x[1], reverse=True)\n\ndef top_k_size(files, k):\n    of = \"{:&lt;10}{:&lt;20}\"\n    for i in range(k):\n        try:\n            fi = files[i]\n        except:\n            break\n        print of.format(pretty_size(fi[1]), fi[0])\n\ndef print_usage():\n    print \"python travfs.py path nnfind the top n biggest file in a path\"\n\nif __name__ == \"__main__\":\n    vlen = len(sys.argv)\n    if vlen == 2:\n        path = sys.argv[1]\n        k = 10\n    elif vlen == 3:\n        path = sys.argv[1]\n        k = int(sys.argv[2])\n    else:\n        print_usage()\n        exit()\n    files = travfs_level_order(os.path.abspath(path))\n    sort_files(files)\n    top_k_size(files, k)<\/pre>\n<p>\u5728<a title=\"\u4e00\u4e9b\u5b9e\u7528\u7684Python\u811a\u672c[bak] | ASPIRE \" href=\"http:\/\/ixyzero.com\/blog\/archives\/260.html\" target=\"_blank\">\u4e4b\u524d\u7684\u4e00\u7bc7\u6587\u7ae0<\/a>\u4e2d\u5176\u5b9e\u6709\u4ecb\u7ecd\u53e6\u4e00\u4e2a\u591a\u7ebf\u7a0b\u67e5\u627eTop10\u5927\u6587\u4ef6\u7684Python\u4ee3\u7801\uff0c\u975e\u5e38\u503c\u5f97\u5b66\u4e60\u3002<\/p>\n<h6>4.\u67e5\u770b\u7aef\u53e3\u60c5\u51b5<\/h6>\n<pre class=\"lang:default decode:true\">import os\nimport struct\nimport socket\n\nstate_table = (\n        \"EMPTY SLOT\",\n        \"ESTABLISHED\",\n        \"SENT\",\n        \"RECV\",\n        \"WAIT1\",\n        \"WAIT2\",\n        \"WAIT\",\n        \"CLOSE\",\n        \"CLOSE_WAIT\",\n        \"LAST_ACK\",\n        \"LISTEN\",\n        \"CLOSING\"\n        )\n\nESTABLISHED = 1\nSENT = 2\nRECV = 3\nWAIT1 = 4\nWAIT2 = 5\nWAIT = 6\nCLOSE = 7\nCLOSE_WAIT = 8\nLAST_ACK = 9\nLISTEN = 10\nCLOSING = 11\n\ndef decode_addr(name):\n    return (socket.inet_ntoa(name[0].decode(\"hex\")[::-1]),\n            struct.unpack(\"&gt;H\", name[1].decode(\"hex\"))[0])\n\ndef get_tcp():\n    f = open(\"\/proc\/net\/tcp\", \"r\")\n    lines = f.readlines()[1:]\n    f.close()\n    l = []\n    for i in lines:\n        k = i.strip(\" \").split(\" \")\n        srcall = k[1].split(\":\")\n        src, srcp = decode_addr(srcall)\n        dstall = k[2].split(\":\")\n        dst, dstp = decode_addr(dstall)\n        tx, rx = k[4].split(\":\")\n        info = {\n            \"num\": k[0],\n            \"src\": src,\n            \"srcp\": srcp,\n            \"dst\": dst,\n            \"dstp\": dstp,\n            \"state\": ord(k[3].decode(\"hex\")),\n            \"tx\": struct.unpack(\"I\", tx.decode(\"hex\"))[0],\n            \"rx\": struct.unpack(\"I\", rx.decode(\"hex\"))[0]\n            }\n        if k[8]:\n            info[\"uid\"] = int(k[8])\n        if k[16]:\n            info[\"timeout\"] = int(k[16])\n        if k[17]:\n            info[\"inode\"] = int(k[17])\n        l.append(info)\n    return l\n\ndef pid_fds():\n    table = {}\n    for i in os.listdir(\"\/proc\"):\n        try:\n            pid = int(i)\n        except:\n            continue\n        basej  = \"\/proc\/%s\/fd\" % i\n        fdtable = {}\n        try:\n            subs = os.listdir(basej)\n        except:\n            continue\n        for j in subs:\n            try:\n                k = os.readlink(\"%s\/%s\" % (basej, j))\n            except:\n                continue\n            fdtable[int(j)] = k\n        table[pid] = fdtable\n    return table\n\ndef inode_to_pid(inode, pid_fds_table):\n    for k,v in pid_fds_table.items():\n        for i in v.values():\n            if inode == i:\n                return k\n    return None\n\ndef port_to_pid(port):\n    tcpinfo = get_tcp()\n    pids_table = pid_fds()\n    pid = None\n    for i in tcpinfo:\n        if \"inode\" not in i:\n            continue\n        if i[\"srcp\"] != port:\n            continue\n        pid = inode_to_pid(\"socket:[%s]\" % str(i[\"inode\"]), pids_table)\n        if pid:\n            break\n    return pid\n\ndef pid_to_loc(pid):\n    f = open(\"\/proc\/%d\/cmdline\" % pid, \"r\")\n    cmdline = f.read().replace(\"x00\", \" \")\n    f.close()\n    return {\n            \"cwd\": os.readlink(\"\/proc\/%d\/cwd\" % pid),\n            \"exe\": os.readlink(\"\/proc\/%d\/exe\" % pid),\n            \"cmdline\": cmdline\n    }\n\ndef do_tcp():\n    of = \"{:&lt;5}{:&lt;30}{:&lt;30}{:&lt;20}\"\n    print of.format(\"NUM\", \"SRC\", \"DST\", \"STATE\")\n    for k in get_tcp():\n        print of.format(k[\"num\"],\n                \":\".join((k[\"src\"], str(k[\"srcp\"]))),\n                \":\".join((k[\"dst\"], str(k[\"dstp\"]))),\n                state_table[k[\"state\"]])\n\ndef do_port(port):\n    pid = port_to_pid(int(port))\n    if not pid:\n        print \"nothing found\"\n        return\n    print \"pid: \", pid\n    loc = pid_to_loc(pid)\n    print \"exe: %sncwd: %sncmdline: %s\" % (loc[\"exe\"], loc[\"cwd\"], loc[\"cmdline\"])\n\ndef print_usage():\n    print \"-p portt find out which process is binded to this portn-t Display all tcp connections\"\n\nif __name__ == \"__main__\":\n    import sys\n    if len(sys.argv) &lt; 2:\n        print_usage()\n        exit(0)\n    if sys.argv[1] == \"-t\":\n        do_tcp()\n    elif sys.argv[1] == \"-p\":\n        if len(sys.argv) &lt; 3:\n            print_usage()\n            exit(0)\n        do_port(sys.argv[2])\n    else:\n        print_usage()<\/pre>\n<h6>5.Python \u4e2d\u5982\u4f55\u5220\u9664\u4e00\u4e2a\u5217\u8868 List \u4e2d\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u5143\u7d20\uff1f<\/h6>\n<p>\u5047\u8bbe\u6709\u4e00\u4e2a\u5217\u8868\uff1a<br \/>\na = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]<\/p>\n<p>\u5224\u65ad\u5982\u679ca\u5217\u8868\u4e2d\u5143\u7d20&#8217;2&#8217;\u524d\u9762\u7684\u4e00\u4e2a\u5143\u7d20\u662f&#8217;0&#8217;\uff0c\u90a3\u4e48\u5220\u9664\u8fd9\u4e2a\u5143\u7d20&#8217;0&#8217;\uff0c\u8bf7\u95ee\u8be5\u5982\u4f55\u64cd\u4f5c\uff1f<br \/>\n========<br \/>\n@\u5218\u7f19<\/p>\n<pre class=\"lang:default decode:true\">[x[0] for x in zip(a,a[1:]+[None]) if x!=(0,2)]<\/pre>\n<p>\u53c8\uff1a\u6ce8\u610f\u5176\u4ed6\u7b54\u6848\u6709\u4e9b\u4e0d\u80fd\u5904\u7406len(a) in [0,1]\u7684\u60c5\u5f62<br \/>\n===<br \/>\n@tonic<br \/>\n\u5982\u679c\u771f\u7684\u662f\u4f60\u8fd9\u6837\u7684\u6570\u636e\u2026\u53d8\u5b57\u7b26\u4e32join\u8d77\u6765\u628a\u6240\u6709\u768402\u53d8\u62102\u4e0d\u5c31\u597d\u4e86\uff1f<br \/>\n====<br \/>\n@Simon Luo<\/p>\n<pre class=\"lang:default decode:true\">for i in range(len(a)-1,-1,-1):\n    if a[i]==0 and a[i+1]==2:\n        a.pop(i)<\/pre>\n<p>\u53c2\u8003\u4e86python\u5e2e\u52a9\u6587\u6863\u91cc\u53bb\u9664list\u4e2d\u91cd\u590d\u5b57\u7b26\u7684\u4ee3\u7801\u3002<br \/>\n===<br \/>\n@\u90ed\u4e00\u51e1<\/p>\n<pre class=\"lang:default decode:true\">a = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]\nfor i in range(0,len(a)-2):\n\tif(a[i]==0 and a[i+1]==2):\n\t\tdel(a[i])\n\t\ti=i-1\nprint a<\/pre>\n<p>[1, 1, 2, 0, 0, 8, 3, 2, 5, 2, 6]<br \/>\n===<br \/>\n@\u7ec5\u58eb\u63d0\u7763\u4e0e\u4e0d\u7b11\u8239<\/p>\n<pre class=\"lang:default decode:true\">import json\na = json.loads(json.dumps(a).replace('0, 2', '2'))<\/pre>\n<p>\u7a0d\u5fae\u5b9e\u73b0\u4e86\u4e00\u4e0b\u697c\u4e0a @tonic \u7684\u8bf4\u6cd5\u3002<br \/>\n===<br \/>\n@\u7396\u9053<br \/>\n\u529f\u80fd\u5e94\u8be5\u80fd\u5b9e\u73b0\uff0c\u4f46\u662f\u5982\u679c\u8003\u8651\u4ee3\u7801\u7b80\u6d01\u7a0b\u5ea6\u6216\u8005\u6548\u7387\uff0c\u8fd8\u662f\u5750\u7b49\u66f4\u9ad8\u660e\u7684\u7b54\u6848\u4e86\u3002<\/p>\n<pre class=\"lang:default decode:true\">def remove_1(lst):\n\tans = []\n\tfor i in range(len(lst)):\n\t\tif lst[i] == 0:\n\t\t\ttry:\n\t\t\t\tif lst[i+1] == 2: pass\n\t\t\t\telse: ans.append(lst[i])\n\t\t\texcept: ans.append(lst[i])\n\t\telse: ans.append(lst[i])\n\treturn ans<\/pre>\n<p>===<br \/>\n@\u533f\u540d\u7528\u6237<\/p>\n<pre class=\"lang:default decode:true\">l = [l[i] for i in filter(lambda i: l[i] !=0 or i == len(l) or l[i+1] != 2, range(len(l)))]<\/pre>\n<p>@\u8303\u5b50\u9038<\/p>\n<pre class=\"lang:default decode:true\">[a[i] for i in range(len(a)) if a[i]!= 0 or i+1==len(a) or a[i+1] != 2]<\/pre>\n<p>@\u5c0f\u751f\u5883<\/p>\n<pre class=\"lang:default decode:true\">a = [1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6]\na = [x for i, x in enumerate(a[:-1]) if not x and a[i+1] == 2]<\/pre>\n<p>\u7528numpy\u7684\u8bdd\u6bd4\u8f83\u70ab\u9177\uff1a<\/p>\n<pre class=\"lang:default decode:true\">import numpy\na = numpy.array([1, 1, 0, 2, 0, 0, 8, 3, 0, 2, 5, 0, 2, 6])\nb = numpy.lib.stride_tricks.as_strided(a, (len(a)-1, 2), (4, 4))\nidx = ~(b == [0, 2]).all(axis=1)\na = a[idx]<\/pre>\n<p>\u6700\u540e\u90fd\u8981append(a[-1])<\/p>\n<pre class=\"lang:default decode:true\">a=[a[i] for i in range(len(a)) if not(a[i]==0 and a[i+1]==2)]<\/pre>\n<p><strong><span style=\"color: #ff0000;\">\u539f\u6587\u5730\u5740<\/span><\/strong>\uff1a<a href=\"http:\/\/www.zhihu.com\/question\/23652846\" target=\"_blank\">Python \u4e2d\u5982\u4f55\u5220\u9664\u4e00\u4e2a\u5217\u8868 List \u4e2d\u591a\u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u5143\u7d20\uff1f<\/a><\/p>\n<p>\u6ce8\u610f\u53ef\u80fd\u51fa\u73b0\u7684\u5728\u8fdb\u884c\u4e86\u4e00\u6b21\u66ff\u4ee3\/pop\u4e4b\u540e\u53ef\u80fd\u4f1a\u518d\u6b21\u51fa\u73b0\u7684\u201c0 2\u201d\u5e8f\u5217\uff0c\u7b2c\u4e00\u79cd\u65b9\u6cd5\u6211\u53ef\u60f3\u4e0d\u5230\uff0c\u5509\uff0co(\u256f\u25a1\u2570)o<\/p>\n<h6>6.\u81ea\u6253\u5370\u7684Python\u811a\u672c<\/h6>\n<pre class=\"lang:default decode:true \">import sys\nprint __file__\nprint sys.argv[0]\ntext = open(__file__).read()\nprint text[:-1]\n#\ntext2 = open(sys.argv[0]).read()\nprint text2[:-1]<\/pre>\n<p>&nbsp;<\/p>\n<p>=================<\/p>\n<h6>zip\u3001filter\u3001map\u3001reduce\u3001lambda<\/h6>\n<p>==<a href=\"http:\/\/www.lfyzjck.com\/python-zip\/\" target=\"_blank\">Python\u4e2dzip()\u51fd\u6570\u7528\u6cd5\u4e3e\u4f8b | \u5357\u67ef\u4e00\u68a6<\/a><br \/>\n\u5b9a\u4e49\uff1azip([iterable, &#8230;])<br \/>\nzip()\u662fPython\u7684\u4e00\u4e2a\u5185\u5efa\u51fd\u6570\uff0c\u5b83\u63a5\u53d7\u4e00\u7cfb\u5217\u53ef\u8fed\u4ee3\u7684\u5bf9\u8c61\u4f5c\u4e3a\u53c2\u6570\uff0c\u5c06\u5bf9\u8c61\u4e2d\u5bf9\u5e94\u7684\u5143\u7d20\u6253\u5305\u6210\u4e00\u4e2a\u4e2atuple\uff08\u5143\u7ec4\uff09\uff0c\u7136\u540e\u8fd4\u56de\u7531\u8fd9\u4e9btuples\u7ec4\u6210\u7684list\uff08\u5217\u8868\uff09\u3002\u82e5\u4f20\u5165\u53c2\u6570\u7684\u957f\u5ea6\u4e0d\u7b49\uff0c\u5219\u8fd4\u56delist\u7684\u957f\u5ea6\u548c\u53c2\u6570\u4e2d\u957f\u5ea6\u6700\u77ed\u7684\u5bf9\u8c61\u76f8\u540c\u3002\u5229\u7528*\u53f7\u64cd\u4f5c\u7b26\uff0c\u53ef\u4ee5\u5c06list unzip\uff08\u89e3\u538b\uff09\uff0c\u770b\u4e0b\u9762\u7684\u4f8b\u5b50\u5c31\u660e\u767d\u4e86\uff1a<\/p>\n<p>&gt;&gt;&gt; a = [1,2,3]<br \/>\n&gt;&gt;&gt; b = [4,5,6]<br \/>\n&gt;&gt;&gt; c = [4,5,6,7,8]<br \/>\n&gt;&gt;&gt; zipped = zip(a,b)<br \/>\n[(1, 4), (2, 5), (3, 6)]<br \/>\n&gt;&gt;&gt; zip(a,c)<br \/>\n[(1, 4), (2, 5), (3, 6)]<br \/>\n&gt;&gt;&gt; zip(*zipped)<br \/>\n[(1, 2, 3), (4, 5, 6)]<\/p>\n<p>==<a href=\"http:\/\/www.iplaypython.com\/jinjie\/zip.html\" target=\"_blank\">Python \u5e76\u884c\u904d\u5386zip()\u51fd\u6570\u4f7f\u7528\u65b9\u6cd5<\/a><br \/>\nzip()\u51fd\u6570\u5728\u8fd0\u7b97\u65f6\uff0c\u4f1a\u4ee5\u4e00\u4e2a\u6216\u591a\u4e2a\u5e8f\u5217\u505a\u4e3a\u53c2\u6570\uff0c\u8fd4\u56de\u4e00\u4e2a\u5143\u7ec4\u7684\u5217\u8868\u3002\u540c\u65f6\u5c06\u8fd9\u4e9b\u5e8f\u5217\u4e2d\u5e76\u6392\u7684\u5143\u7d20\u914d\u5bf9\u3002<\/p>\n<p>==<a href=\"http:\/\/www.2cto.com\/kf\/201401\/269906.html\" target=\"_blank\">Python\u4e2d\u7684map\u51fd\u6570\u3001zip\u51fd\u6570\u3001filter\u51fd\u6570\u548creduce\u51fd\u6570<\/a><\/p>\n<p>\u5728\u672c\u6587\u6700\u4e0a\u9762\u5218\u7f19\u7684\u4f8b\u5b50\u4e2d\u4e4b\u6240\u4ee5\u6700\u540e\u53ef\u4ee5\u5f97\u5230\u7ed3\u679c\uff0c\u662f\u56e0\u4e3azip()\u51fd\u6570\u672c\u8eab\u5c31\u662f\u4e00\u4e2a\u8fed\u4ee3\u5bf9\u8c61\uff0c\u4f1a\u4e0d\u505c\u7684\u5f80\u540e\u8fdb\u884c\u8fed\u4ee3\uff0c\u6240\u4ee5\u624d\u6709\u7528\uff0c\u5509\uff0c\u65e0\u77e5\u771f\u53ef\u6015\uff01<br \/>\nIn [15]: zip?<br \/>\nType: builtin_function_or_method<br \/>\nString form: &lt;built-in function zip&gt;<br \/>\nNamespace: Python builtin<br \/>\nDocstring:<br \/>\nzip(seq1 [, seq2 [&#8230;]]) -&gt; [(seq1[0], seq2[0] &#8230;), (&#8230;)]<\/p>\n<p>Return a list of tuples, where each tuple contains the i-th element from each of the argument sequences. The returned list is truncated in length to the length of the shortest argument sequence.<\/p>\n<h6>\u4e00\u4e9b\u53c2\u8003\u94fe\u63a5\uff1a<\/h6>\n<ul>\n<li><a href=\"http:\/\/www.cnblogs.com\/lovebread\/archive\/2010\/11\/09\/1872774.html\" target=\"_blank\">[Python] \u63a7\u5236\u53f0\u8f93\u5165\u5bc6\u7801\u7684\u65b9\u6cd5<\/a><\/li>\n<li><a href=\"https:\/\/gist.github.com\/maliubiao\" target=\"_blank\">https:\/\/gist.github.com\/maliubiao<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>1.\u83b7\u5f97\u7528\u6237\u548c\u7ec4\u4fe1\u606f #! \/usr\/bin\/env python #-*- coding: utf-8 -* [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7],"tags":[8],"class_list":["post-1494","post","type-post","status-publish","format-standard","hentry","category-programing","tag-python"],"views":1794,"_links":{"self":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1494","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/comments?post=1494"}],"version-history":[{"count":0,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/posts\/1494\/revisions"}],"wp:attachment":[{"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/media?parent=1494"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/categories?post=1494"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ixyzero.com\/blog\/wp-json\/wp\/v2\/tags?post=1494"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}