{"id":1297,"date":"2022-09-06T19:56:33","date_gmt":"2022-09-06T11:56:33","guid":{"rendered":"http:\/\/175.24.184.226\/?p=1297"},"modified":"2022-09-06T19:56:33","modified_gmt":"2022-09-06T11:56:33","slug":"python%e6%96%87%e4%bb%b6%e5%8f%8a%e8%b7%af%e5%be%84","status":"publish","type":"post","link":"\/?p=1297","title":{"rendered":"python\u6587\u4ef6\u53ca\u8def\u5f84"},"content":{"rendered":"<h2>\u5220\u9664\u6587\u4ef6\u548c\u6587\u4ef6\u5939<\/h2>\n<pre><code class=\"language-python\">import shutil\nimport os\nfrom pathlib import Path\n\n# \u7b2c\u4e00\u79cd\uff1a\u5220\u9664\u4e00\u4e2a\u6587\u4ef6\u5939\uff0c\u65e0\u8bba\u91cc\u9762\u662f\u5426\u6709\u6587\u4ef6\u6216\u6587\u4ef6\u5939\n# (\u4e0d\u652f\u6301\u6587\u4ef6\uff0c\u6587\u4ef6\u5939\u4e0d\u5b58\u5728\u4f1a\u62a5\u9519)\ndef del_files0(dir_path):\n    shutil.rmtree(dir_path)\n\n# \u7b2c\u4e8c\u79cd \u9012\u5f52\u5220\u9664dir_path\u76ee\u6807\u6587\u4ef6\u5939\u4e0b\u6240\u6709\u6587\u4ef6\uff0c\u4ee5\u53ca\u5404\u7ea7\u5b50\u6587\u4ef6\u5939\u4e0b\u6587\u4ef6\uff0c\u4fdd\u7559\u5404\u7ea7\u7a7a\u6587\u4ef6\u5939\n# (\u652f\u6301\u6587\u4ef6\uff0c\u6587\u4ef6\u5939\u4e0d\u5b58\u5728\u4e0d\u62a5\u9519)\ndef del_files(dir_path):\n    if os.path.isfile(dir_path):\n        try:\n            os.remove(dir_path) # \u8fd9\u4e2a\u53ef\u4ee5\u5220\u9664\u5355\u4e2a\u6587\u4ef6\uff0c\u4e0d\u80fd\u5220\u9664\u6587\u4ef6\u5939\n        except BaseException as e:\n            print(e)\n    elif os.path.isdir(dir_path):\n        file_lis = os.listdir(dir_path)\n        for file_name in file_lis:\n            # if file_name != &#039;wibot.log&#039;:\n            tf = os.path.join(dir_path, file_name)\n            del_files(tf)\n    print(&#039;ok&#039;)\n\n# \u7b2c\u4e09\u79cd\uff1a \u5220\u9664dir_path\u76ee\u6807\u6587\u4ef6\u5939\u4e0b\u6240\u6709\u5185\u5bb9\uff0c\u4fdd\u7559dir_path\u6587\u4ef6\u5939\n# (\u4e0d\u652f\u6301\u6587\u4ef6\uff0c\u6587\u4ef6\u5939\u4e0d\u5b58\u5728\u4f1a\u62a5\u9519)\ndef del_files2(dir_path):\n    # os.walk\u4f1a\u5f97\u5230dir_path\u4e0b\u5404\u4e2a\u540e\u4ee3\u6587\u4ef6\u5939\u548c\u5176\u4e2d\u7684\u6587\u4ef6\u7684\u4e09\u5143\u7ec4\u5217\u8868\uff0c\u987a\u5e8f\u81ea\u5185\u800c\u5916\u6392\u5217\uff0c\n    # \u5982 log\u4e0b\u6709111\u6587\u4ef6\u5939\uff0c111\u4e0b\u6709222\u6587\u4ef6\u5939\uff1a[(&#039;D:\\\\log\\\\111\\\\222&#039;, [], [&#039;22.py&#039;]), (&#039;D:\\\\log\\\\111&#039;, [&#039;222&#039;], [&#039;11.py&#039;]), (&#039;D:\\\\log&#039;, [&#039;111&#039;], [&#039;00.py&#039;])]\n    for root, dirs, files in os.walk(dir_path, topdown=False):\n        print(root) # \u5404\u7ea7\u6587\u4ef6\u5939\u7edd\u5bf9\u8def\u5f84\n        print(dirs) # root\u4e0b\u4e00\u7ea7\u6587\u4ef6\u5939\u540d\u79f0\u5217\u8868\uff0c\u5982 [&#039;\u6587\u4ef6\u59391&#039;,&#039;\u6587\u4ef6\u59392&#039;]\n        print(files)  # root\u4e0b\u6587\u4ef6\u540d\u5217\u8868\uff0c\u5982 [&#039;\u6587\u4ef61&#039;,&#039;\u6587\u4ef62&#039;]\n        # \u7b2c\u4e00\u6b65\uff1a\u5220\u9664\u6587\u4ef6\n        for name in files:\n            os.remove(os.path.join(root, name))  # \u5220\u9664\u6587\u4ef6\n        # \u7b2c\u4e8c\u6b65\uff1a\u5220\u9664\u7a7a\u6587\u4ef6\u5939\n        for name in dirs:\n            os.rmdir(os.path.join(root, name)) # \u5220\u9664\u4e00\u4e2a\u7a7a\u76ee\u5f55\n\n        # \u5982\u679c\u5b58\u5728\u76ee\u5f55\u5219\u5220\u9664\uff0c\u5e76\u521b\u5efa\u65b0\u6587\u4ef6\u5939\n        if os.path.exists(path):\n            shutil.rmtree(path, True)\n        os.mkdir(path)\n\nif __name__ == &#039;__main__&#039;:\n    dir_path = Path(&#039;.\/log&#039;).absolute()\n    del_files2(dir_path)\n<\/code><\/pre>\n<h2>\u6253\u5370\u5f53\u524d\u76ee\u5f55<\/h2>\n<pre><code>os.getcwd()\n# &gt;&gt;&gt;&#039;&#039;D:\\\\workspace\\\\\u722c\u866b\u6587\u6863\u6574\u7406\\\\08-\u8f6f\u4ef6\u8c37oceanspider\\\\oceanspider&#039;\nos.path.abspath(os.curdir)\n# &gt;&gt;&gt;&#039;&#039;D:\\\\workspace\\\\\u722c\u866b\u6587\u6863\u6574\u7406\\\\08-\u8f6f\u4ef6\u8c37oceanspider\\\\oceanspider&#039;\nos.path.abspath(&#039;.&#039;)\n# &gt;&gt;&gt;&#039;&#039;D:\\\\workspace\\\\\u722c\u866b\u6587\u6863\u6574\u7406\\\\08-\u8f6f\u4ef6\u8c37oceanspider\\\\oceanspider&#039;\nsys.path[0]\n# &gt;&gt;&gt;&#039;&#039;D:\\\\SoftwarePlace\\\\JetBrains\\\\PyCharm 2021.2.1\\\\plugins\\\\python\\\\helpers\\\\pydev&#039;\nsys.argv[0]\n# &gt;&gt;&gt;&#039;&#039;D:\\\\SoftwarePlace\\\\JetBrains\\\\PyCharm 2021.2.1\\\\plugins\\\\python\\\\helpers\\\\pydev\\\\pydevconsole.py&#039;\nsys.argv\n# &gt;&gt;&gt;&#039;[&#039;D:\\\\SoftwarePlace\\\\JetBrains\\\\PyCharm 2021.2.1\\\\plugins\\\\python\\\\helpers\\\\pydev\\\\pydevconsole.py&#039;, &#039;--mode=client&#039;, &#039;--port=55166&#039;]\nsys.path<\/code><\/pre>\n<h2>windows\u8def\u5f84\u95ee\u9898<\/h2>\n<p>windows \u4e2d\u8def\u5f84\u4f7f\u7528\u53cd\u659c\u7ebf\uff0clinux\u4e0b\u8def\u5f84\u4f7f\u7528\u2019\/\u2019, windows\u4e0b\u7684\u8def\u5f84\u5728linux\u4e0b\u662f\u4e0d\u80fd\u88ab\u8bc6\u522b\u7684\u3002<\/p>\n<pre><code class=\"language-python\">path = os.path.split(os.path.realpath(file))[0] + r\u2019\\cmds\u2019<\/code><\/pre>\n<p>\u8fd9\u6837\u7684\u8def\u5f84\u4e0d\u4f1a\u88ablinux\u6240\u8bc6\u522b<br \/>\n\u89e3\u51b3\u65b9\u6848<\/p>\n<ol>\n<li>\n<p>\u4f7f\u7528<code>os.path.join<\/code><\/p>\n<pre><code class=\"language-python\">path = os.path.join(os.path.split(os.path.realpath(__file__))[0], 'cmds')<\/code><\/pre>\n<\/li>\n<li>\n<p>\u4f7f\u7528<code>os.sep<\/code>, python\u4f1a\u6839\u636e\u4e0d\u540c\u7684\u7cfb\u7edf\u81ea\u52a8\u9009\u62e9\u5408\u9002\u7684\u8def\u5f84\u5206\u9694<\/p>\n<pre><code class=\"language-python\">path = os.path.split(os.path.realpath(__file__))[0] + os.sep + 'cmds'<\/code><\/pre>\n<\/li>\n<li>\n<p>\u53ef\u4ee5\u5c06\u6240\u6709\u7684\u8def\u5f84\u90fd\u4f7f\u7528\u6b63\u659c\u7ebf\uff1a\u2019\/\u2019, \u5728windows\u548clinux\u90fd\u6709\u6548<\/p>\n<pre><code class=\"language-python\">path = path.replace('\\\\', '\/')<\/code><\/pre>\n<\/li>\n<li>\n<p>\u4f7f\u7528\u6700\u65b0\u7684<code>pathlib<\/code>\u6a21\u5757<\/p>\n<pre><code class=\"language-python\">import pathlib\npathlib.Path('C:\\dir', 'cmds') # WindowsPath('C:\/dir\/cmds')<\/code><\/pre>\n<\/li>\n<\/ol>\n<h2>\u6c14\u8c61\u9884\u8b66\u9879\u76ee\u793a\u4f8b<\/h2>\n<pre><code class=\"language-python\"># -*- coding: UTF-8 -*-\n&quot;&quot;&quot;=========================================================\n@Project -&gt; File: WeatherInfoSpider -&gt; upload\n@IDE: PyCharm\n@author: lxc\n@date: 2022\/8\/30 \u4e0b\u5348 3:07\n@Desc:\n1-\u529f\u80fd\u63cf\u8ff0\uff1a\n\u4e0a\u4f20\u4e94\u5206\u949f\u5185\u7684\u6570\u636e\u81f3FTP\u4f4d\u7f6e\n2-\u5b9e\u73b0\u6b65\u9aa4\n    1-\u8bfb\u53d6\u8868\u6570\u636e\n    2-\u751f\u6210xlsx\n    3-\u4e0a\u4f20\u81f3ftp\n&quot;&quot;&quot;\nimport os\nimport datetime\nfrom openpyxl import Workbook\nfrom utils.pipeline_mysql import ItemToMysql\nfrom config.config import TABLE_NAME\nfrom utils.log_template import Logger\nfrom utils.ftp_upload import MyFTP\nfrom config.config import LOGGING\n\nlogger = Logger(LOGGING).get_logger(&#039;upload&#039;)\n\ndef get_last_items(before_timestamp):\n    conn, cursor = ItemToMysql(table_name=TABLE_NAME).connectMysql()\n    sql = &quot;&quot;&quot;SELECT * FROM {0}  WHERE release_time &gt; &#039;{1}&#039; ORDER BY release_time DESC&quot;&quot;&quot;.format(TABLE_NAME,\n                                                                                                before_timestamp)\n    try:\n        cursor.execute(sql)\n        result = cursor.fetchall()\n    except Exception as err:\n        result = []\n        logger.exception(err)\n    finally:\n        conn.close()\n        cursor.close()\n    return result\n\ndef run(minutes=-5):\n    # minutes\u5206\u949f\u4e4b\u524d\u7684\u65f6\u95f4\n    before_timestamp = (datetime.datetime.now() + datetime.timedelta(minutes=minutes)).strftime(&quot;%Y-%m-%d %H:%M:%S&quot;)\n    # \u83b7\u53d6\u8be5\u65f6\u95f4\u70b9\u4e4b\u540e\u7684\u6570\u636e\n    items = get_last_items(before_timestamp)\n    if not items:\n        logger.info(&quot;\u4e94\u5206\u949f\u5185\u65e0\u6570\u636e\u66f4\u65b0\uff0c\u9000\u51fa\uff01&quot;)\n        return\n    else:\n        logger.info(&quot;\u4e94\u5206\u949f\u5185\u6709\u6570\u636e\u66f4\u65b0\uff0c\u5f00\u59cb\uff01&quot;)\n        to_excel(items)\n\ndef to_excel(items):\n    &quot;&quot;&quot;\n    \u5c06\u6570\u636e\u5bfc\u51fa\u5230excel\n    :return:\n    &quot;&quot;&quot;\n    logger.info(&quot;\u51c6\u5907\u5bfc\u51faExcel...&quot;)\n    fields = list(items[0].keys())\n    # \u5b9e\u4f8b\u5316\n    wb = Workbook()\n    # \u521b\u5efa\u8868\uff08sheet\uff09\n    sheet = wb.worksheets[0]\n\n    # \u5199\u5165\u6807\u9898\n    row = 1\n    for col, field in enumerate(fields):\n        sheet.cell(row=row, column=col + 1, value=field)\n\n    # \u5199\u5165\u6570\u636e\n    length = len(items)\n    for data in items:\n        for col, field in enumerate(data):\n            try:\n                cell_message = data[field]\n                cell = sheet.cell(row + 1, col + 1, cell_message)\n                if str(cell_message).startswith(&#039;=&#039;):\n                    cell.number_format = &#039;General&#039;\n                    cell.data_type = &#039;s&#039;\n            except Exception as e:\n                sheet.cell(row + 1, col + 1, &#039;&#039;)\n                logger.error(e)\n        logger.info(&quot;\u8868{0}&quot;.format(TABLE_NAME) + &quot;\u5bfc\u51fa\u8fdb\u5ea6\uff1a%.2f&quot; % (row * 100 \/ length) + &quot;%&quot;)\n        row += 1\n    # \u4fdd\u5b58\u6570\u636e\n    file_name = &quot;WeatherInfo-{}.xlsx&quot;.format(datetime.datetime.now().strftime(&quot;%Y-%m-%d %H.%M.%S&quot;))\n    tree_path = os.getcwd() + os.sep + &#039;TemporaryFiles&#039;\n    # \u5982\u679c\u4e0d\u5b58\u5728\u76ee\u5f55\uff0c\u5219\u521b\u5efa\u4e34\u65f6\u6587\u4ef6\u5939\n    if not os.path.exists(os.getcwd() + os.sep + &#039;TemporaryFiles&#039;):\n        os.mkdir(tree_path)\n    client_path = tree_path + os.sep + file_name\n    logger.info(&quot;\u6b63\u5728\u4fdd\u5b58\u81f3{} ...&quot;.format(client_path))\n    # \u5c06\u6570\u636e\u4fdd\u5b58\u81f3\u4e34\u65f6\u6587\u4ef6\u5939\u4e2d\n    wb.save(client_path)\n    # \u4e0a\u4f20ftp\n    server_path = &quot;\/data\/data01\/ftp\/nanshui_weather_info\/&quot; + file_name\n    upload(client_path, server_path)\n    os.remove(client_path)\n    logger.info(&quot;{}\uff1a\u4fdd\u5b58\u5b8c\u6bd5&quot;.format(file_name))\ndef upload(client_path, server_path):\n    my_ftp = MyFTP()\n    my_ftp.login(&quot;ftp&quot;, &quot;Ftp!@#9ijn4rfv&quot;)\n    # \u4e0a\u4f20\u5355\u4e2a\u6587\u4ef6\n    my_ftp.upload_file(client_path, server_path)\n\n    my_ftp.close()\nif __name__ == &#039;__main__&#039;:\n    import os\n\n    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))\n    os.chdir(BASE_DIR)\n    run(-30)\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5220\u9664\u6587\u4ef6\u548c\u6587\u4ef6\u5939 import shutil import os from pathlib import Path # \u7b2c\u4e00\u79cd\uff1a\u5220\u9664\u4e00\u4e2a   \u2026 &#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0},"categories":[34],"tags":[],"_links":{"self":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1297"}],"collection":[{"href":"\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1297"}],"version-history":[{"count":1,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1297\/revisions"}],"predecessor-version":[{"id":1298,"href":"\/index.php?rest_route=\/wp\/v2\/posts\/1297\/revisions\/1298"}],"wp:attachment":[{"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1297"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1297"},{"taxonomy":"post_tag","embeddable":true,"href":"\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1297"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}