精华内容
下载资源
问答
  • python上传excel表格数据到ftp服务器
  • 使用python-ftp协议上传数据到远程服务器
    # -*- coding: utf-8 -*-
    '''
    Created on 2015年9月1日
    此程序在民生路dpismzapp主机上运行
    把migration数据上传到奕行ftp服务器(给学军使用)
    @author: Mr.ZHOU
    '''
    import time
    import os
    import traceback
    from ftplib import FTP
    
    localfilelist='/home/yixin/yxdata/ftp/update_migration.txt'
    localdir='/home/yixin/yxdata/migration_stat/'
    remotedir='/qujian_stat/'
    print('The FTPupload migration programe is running...')
    
    def getftpconnect():  
        ftp_server = '116.236.134.122'  
        username = 'admin'  
        password = '123.com'  
        ftp=FTP()  
        ftp.set_debuglevel(2) #打开调试级别2,显示详细信息  
        ftp.connect(ftp_server,21) #连接  
        ftp.login(username,password) #登录,如果匿名登录则用空串代替即可  
        return ftp  
                
    def ftp_upload(ftp,remotefile,localfile):
        try:
            bufsize = 1024  
            fp = open(localfile,'rb')  
            ftp.storbinary('STOR '+ remotefile,fp,bufsize) #上传文件  
            ftp.set_debuglevel(0)  
            fp.close() #关闭文件  
            
        except Exception as e:
            traceback.print_exc()
                
    if __name__ == '__main__':
        
        if os.path.exists(localfilelist):   
            print("已找到历史记录文件,程序将忽略在已下载列表的文件,注意定期清理历史记录文件哦,否则会很大!")
        else:
            print("未找到已下载历史记录文件,稍后程序会自动创建新的记录文件!")   
                      
        while True:
            if os.path.exists(localfilelist):
                with open(localfilelist,'r') as file1:
                    filelist=file1.readlines()#读取本地已有的文件列表
                    filelist=map(str.strip,filelist)#过滤每一行的\n
                    localfileset=set(filelist)
            else:
                localfileset=set()  
            #建立传输通道           
            try:
                ftptransport=getftpconnect()
                remote_localfiles=os.listdir(localdir)#这个程序中比较的文件列表就在本地
                remote_localfileset=set(remote_localfiles)
                #求差集,获得新文件列表
                newfiles=remote_localfileset-localfileset
                newfileslist=list(newfiles)
                newfileslist.sort()#按顺序上传
                time.sleep(10)#10s执行一次,顺便等待文件写完
                
                with open(localfilelist,'a') as locallist:
                    for item in newfileslist:
                        file_to_send=localdir+str(item)
                        remotefile=remotedir+str(item)
                        ftp_upload(ftptransport,remotefile,file_to_send)
                        locallist.write(str(item)+"\n")#把已经上传的文件追加到已下载记录中去
                    
                ftptransport.quit()
            except Exception as e:
                traceback.print_exc()
                try:
                    ftptransport.close()
                except:
                        pass
                    
            
        
        
        
        
        
        
        
        
        

    展开全文
  • 很多朋友在留言区询问关于python上传文件和字符到服务器的问题,现编针对这个给大家整理了一个解决办法。 上传简单的字符串 def send_str_server(self): payload = {'key1': 'value1', 'key2': 'value2'} r = ...
  • 在已经实现硬件采集完数据后通过蓝牙上传到树莓派固定路径的基础之上,我们完成Python上传文件到云服务器,以及Linux的定时任务和Cran日志重定向。 一、paramiko上传文件到服务器 pip install paramiko==2.4.2 ...

     

    实验室用32和树莓派做了胎心采集硬件,为了方便以后去医院和实现家用便捷化,初步先写一个远程获取数据服务,做到医生或用户采集完数据后自动上传服务器,我们可以不用现场去测数据,直接到服务器获取下载数据。

    在已经实现硬件采集完数据后通过蓝牙上传到树莓派固定路径的基础之上,我们完成Python上传文件到云服务器,以及Linux的定时任务和Cron日志重定向。


    一、paramiko上传文件到服务器

    pip install paramiko==2.4.2

    import paramiko
    import datetime
    import os
    
    
    hostname = '服务器ip'
    username = '用户名'
    password = '密码'
    port = 端口号,一般是22
    
    def upload(local_dir, remote_dir):
        try:
            t = paramiko.Transport((hostname, port))
            t.connect(username=username, password=password)
            sftp = paramiko.SFTPClient.from_transport(t)
            print('upload file start %s ' % datetime.datetime.now())
            for root, dirs, files in os.walk(local_dir):
                # 遍历文件夹下的文件夹和文件 dirs为文件夹、files为文件
                print('[%s][%s][%s]' % (root, dirs, files))
                for filespath in files:
                    local_file = os.path.join(root, filespath)
                    print(11, '[%s][%s][%s][%s]' % (root, filespath, local_file, local_dir))
                    a = local_file.replace(local_dir, '').replace('\\', '/').lstrip('/')
                    remote_file = os.path.join(remote_dir, a)
                    print(22, remote_file)
                    try:
                        sftp.put(local_file, remote_file)
                    except Exception as e:
                        sftp.mkdir(os.path.split(remote_file)[0])
                        sftp.put(local_file, remote_file)
                        print("66 upload %s to remote %s" % (local_file, remote_file))
                for name in dirs:
                    local_path = os.path.join(root, name)
                    a = local_path.replace(local_dir, '').replace('\\', '')
                    remote_path = os.path.join(remote_dir, a)
                    print(33, remote_path)
                    try:
                        sftp.mkdir(remote_path)
                        print(44, "mkdir path %s" % remote_path)
                    except Exception as e:
                        print(e)
            print('77,upload file success %s ' % datetime.datetime.now())
            t.close()
        except Exception as e:
            print(e)
    
    
    if __name__ == '__main__':
        local_dir = r'树莓派文件路径'
        remote_dir = r'要保存的服务器路径'
        upload(local_dir, remote_dir)

    二、Linux开启定时任务

    1、添加定时任务

    crontab -e

    • -u:这个参数可以让我们去编辑其他人的crontab,如果没有加上这个参数的话就会开启自己的crontab。例如crontab -u root -e, 开启root用户下定时任务
    • -l:可以列出crontab的内容
    • -r:可以移除crontab
    • -e:可以使用系统预设的编辑器,开启crontab
    • -i:可以移除crontab,会跳出系统信息让你再次确定是否移除crontab

    2、编辑定时任务

    # 假设我们刚才的文件传输python脚本命名为ecgtran.py,保存在/home/pi/Desktop/路径下,我们设置在每天的下午4点半执行一次

    30 16 * * *  python /home/pi/Desktop/ecgtran.py

    需要注意的是,*之间要用空格隔开;五个符号位分别从左到右代表分、时、日、月、星期

    • 分钟:0~59的整数
    • 小时:0~23的整数
    • 日期:1~31的整数
    • 月份:1~12的整数
    • 星期:0~7(0和7表示星期天)的整数

    编辑完后保存退出。控制台回显“crontab:installing new crontab” 表示添加调度任务成功。

    3、查看cron进程

    ps -ax|grep cron

    三、Cron日志重定向

    /etc/cron.hourly   /etc/cron.daily   /etc/cron.weekly     /etc/cron.monthly

    这四个目录分别 记录了小时、日、周、月的定时任务

    ubuntu系统内部是没有cron.log的,因此许多小伙伴在/var/log/路径下找不到cron.log。因此这就需要Cron日志重定向。

    • 1、修改rsyslog 

    vim /etc/rsyslog.conf  将#cron.*   的注释删除

    • 2、重启rsyslog

    service rsyslog  restart

    • 3、查看cron日志

    vim /var/log/cron.log  如果没有就再重启一下定时任务,重启后就能看到cron.log日志文件啦!


    可见我是每分钟执行 python3 /home/pi/Desktop/ecgtran.py 这条命令的。 

    展开全文
  • Python实现定时备份Mongodb数据,并上传到FTP服务器实现的功能:在win7下,每天晚上1点,自动将 F:/data中所有文件进行压缩,以[mongodb+日期]命名,将压缩好的文件存储在本地目录 F:\MongoDbData\,然后将这个...

    用Python实现定时备份Mongodb数据,并上传到FTP服务器


    实现的功能:在win7下,每天晚上1点,自动将 F:/data中所有文件进行压缩,以[mongodb+日期]命名,将压缩好的文件存储在本地目录 F:\MongoDbData\,然后将这个压缩好的文件上传到ftp://192.168.0.101/MongoDBup/目录下

    分三步:

    • 第一步:搭建FTP服务器,配置好FTP环境。
    • 第二步:用python编写压缩文件并实现FTP上传的脚本
    • 第三步:使用win7自带的任务计划程序定时执行python脚本

    1. 环境

    • Python:3.6.1
    • Python IDE:pycharm
    • 系统:win7

    2. 搭建FTP服务器,配置好FTP环境

    • 2.1. 启用FTP和IIS服务器
      这里写图片描述
      注意:要全部展开,勾选上。

    • 2.2. 添加FTP服务器
      这里写图片描述

    这里写图片描述

    • 2.3. 设置参数
      这里写图片描述

    这里写图片描述

    这里写图片描述

    • 2.4. 设置成功,访问
      这里写图片描述

    参考:https://jingyan.baidu.com/article/574c5219d466c36c8d9dc138.html

    3. 用python编写压缩文件并实现FTP上传的脚本

    • 3.1. Import包:
    # python3.6.1
    import zipfile
    import os
    import datetime
    from ftplib import FTP
    • 3.2. 定义配置信息:
    # 定义配置信息
    srcFolder = r"F:\Data"              # 被压缩的源数据,文件夹形式
    desFolder = r'F:\MongoDbData\\'     # 压缩好的数据临时存放的位置
    ftp_url = "192.168.0.101"           # FTP服务器地址
    ftp_port = 21                       # FTP服务端口号
    ftpUploadFolder = "MongoDBup"       # 压缩数据在FTP服务器上存放的位置
    • 3.3. 压缩数据源(文件夹):
    # 压缩文件夹
    def zipFolder(srcFolder, desFolder, date):
        '''
        :param srcFolder: 被压缩的源数据位置
        :param desFolder: 压缩之后文件的存放路径
        :param date: 执行压缩的当前时间,datetime产生(ext:2017-08-16 14:56:40.872613)
        :return: 压缩文件的路径
        '''
        startTime = datetime.datetime.now()
        print(f"Enter func zipFolder, time:{startTime}")
        desName = f"{desFolder}mongodb{date.year}{date.month}{date.day}.zip"
    
        # 检查是否已经压缩过了
        if os.path.exists(desName):
            endTime = datetime.datetime.now()
            print(f"Already exsist, leave func zipFolder, time:{endTime}, usedTime:{endTime-startTime}")
            return desName
    
        z = zipfile.ZipFile(desName, 'w', zipfile.ZIP_DEFLATED)
        for dirpath, dirnames, filenames in os.walk(srcFolder):
            print(f"dirpath:{dirpath}, dirnames:{dirnames}, filenames:{filenames}")
            for filename in filenames:
                try:
                    # Mongodb在运行时,有几个关于lock的文件无法压缩,为了避免程序终止,忽略这几个文件
                    z.write(os.path.join(dirpath, filename))
                except Exception as e:
                    print(f"except: {e}, cannot zip file: {dirpath}{filename}")
        z.close()
        endTime = datetime.datetime.now()
        print(f"zip done, leave func zipFolder, time:{endTime}, usedTime:{endTime-startTime}")
        return desName
    • 3.4. 文件上传到FTP服务器上:
    # 上传文件至FTP服务器
    def ftpUpload(filename, folder, ftp_url, ftp_port):
        '''
        :param filename: 待上传文件路径
        :param folder: 文件上传至FTP服务器上的存储目录
        :param ftp_url: FTP服务器IP
        :param ftp_port: 端口号,默认为21
        :return: status code
        '''
        startTime = datetime.datetime.now()
        print(f"Enter func ftpUpload, time:{startTime}")
        ftp = FTP()
        ftp.set_debuglevel(2)                   # set debug level, detail info:2, close:0
        ftp.connect(ftp_url, ftp_port)
        ftp.login('', '')                       # 登录,如果匿名登录则用空串代替
        print(ftp.getwelcome())                 # ext: *welcome* '220 Microsoft FTP Service'
        ftp.cwd(folder)                         # Change to a directory on FTP server
        bufsize = 1024                          # 设置缓冲块大小
        file_handler = open(filename, 'rb')     # 读模式在本地打开文件
        res = -1
        try:
            # 为了避免程序终止,忽略可能出现的错误
            res = ftp.storbinary(f"STOR {os.path.basename(filename)}", file_handler, bufsize)  # upload file
        except Exception as e:
            print(f"except: {e}, cannot upload file: {ftp_url}:{ftp_port} {filename}")
        finally:
            ftp.set_debuglevel(0)                   # 关闭debug信息
            file_handler.close()
            ftp.quit()
        endTime = datetime.datetime.now()
        print(f"Upload done, leave func ftpUpload, time:{endTime}, usedTime:{endTime-startTime}")
        return res
    • 3.5. 主程序:
    # main
    backupTime = datetime.datetime.now()
    zip_des_name = zipFolder(srcFolder, desFolder, backupTime)
    print(zip_des_name)
    ftp_res = ftpUpload(zip_des_name, ftpUploadFolder, ftp_url, ftp_port)
    print(f"ftp_res: {ftp_res}")

    4. 使用win7自带的任务计划程序定时执行python脚本

    位置:开始 ——> 附件 ——> 系统工具 ——> 任务计划程序

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    这里写图片描述

    不需要时,右键——>删除任务 即可

    5. 效果

    • 5.1. 本地生成的压缩文件
      这里写图片描述

    • 5.2. 上传至FTP服务器的压缩文件
      这里写图片描述

    • 5.3. 详细信息-性能-时间
      日志信息:
      源文件data总共8.7G,压缩后5.3G,压缩时间20m,局域网内上传时间18m。

    E:\Miniconda\python.exe E:/PyCharmCode/Justtest/bak.py
    Enter func zipFolder, time:2017-08-16 19:48:39.331200
    dirpath:F:\Data, dirnames:['diagnostic.data', 'journal'], filenames:['collection-0--394122179086539486.wt', 'collection-102--394122179086539486.wt', 'collection-104--394122179086539486.wt', 'collection-106--394122179086539486.wt', 'collection-108--394122179086539486.wt'], '_mdb_catalog.wt']
    except: [Errno 13] Permission denied: 'F:\\Data\\mongod.lock', cannot zip file: F:\Datamongod.lock
    except: [Errno 13] Permission denied, cannot zip file: F:\DataWiredTiger.lock
    dirpath:F:\Data\diagnostic.data, dirnames:[], filenames:['metrics.2017-08-04T07-04-29Z-00000', 'metrics.2017-08-05T10-47-22Z-00000', 'metrics.2017-08-06T14-52-22Z-00000', 'metrics.2017-08-07T18-17-22Z-00000', 'metrics.2017-08-15T06-09-26Z-00000', 'metrics.2017-08-16T09-51-29Z-00000']
    dirpath:F:\Data\journal, dirnames:[], filenames:['WiredTigerLog.0000000247', 'WiredTigerPreplog.0000000006', 'WiredTigerPreplog.0000000007', 'WiredTigerPreplog.0000000008']
    zip done, leave func zipFolder, time:2017-08-16 20:08:22.728200, usedTime:0:19:43.397000
    F:\MongoDbData\\mongodb2017816.zip
    Enter func ftpUpload, time:2017-08-16 20:08:22.728200
    *get* '220 Microsoft FTP Service\n'
    *resp* '220 Microsoft FTP Service'
    *cmd* 'USER anonymous'
    *put* 'USER anonymous\r\n'
    *get* '331 Anonymous access allowed, send identity (e-mail name) as password.\n'
    *resp* '331 Anonymous access allowed, send identity (e-mail name) as password.'
    *cmd* 'PASS **********'
    *put* 'PASS **********\r\n'
    *get* '230 User logged in.\n'
    *resp* '230 User logged in.'
    *welcome* '220 Microsoft FTP Service'
    220 Microsoft FTP Service
    *cmd* 'CWD MongoDBup'
    *put* 'CWD MongoDBup\r\n'
    *get* '250 CWD command successful.\n'
    *resp* '250 CWD command successful.'
    *cmd* 'TYPE I'
    *put* 'TYPE I\r\n'
    *get* '200 Type set to I.\n'
    *resp* '200 Type set to I.'
    *cmd* 'PASV'
    *put* 'PASV\r\n'
    *get* '227 Entering Passive Mode (192,168,0,101,11,221).\n'
    *resp* '227 Entering Passive Mode (192,168,0,101,11,221).'
    *cmd* 'STOR mongodb2017816.zip'
    *put* 'STOR mongodb2017816.zip\r\n'
    *get* '125 Data connection already open; Transfer starting.\n'
    *resp* '125 Data connection already open; Transfer starting.'
    *get* '226 Transfer complete.\n'
    *resp* '226 Transfer complete.'
    Upload done, leave func ftpUpload, time:2017-08-16 20:26:20.125200, usedTime:0:17:57.397000
    ftp_res: 226 Transfer complete.
    

    6. 注意事项

    6.1. FTP服务器IP地址变更处理

    6.1.1. 第一步,修改FTP服务器站点配置。

    这里写图片描述

    6.1.2. 第二步,修改代码中FTP登录IP

    ftp.connect("172.16.7.107", 21)

    6.1.3. 出错信息

    • 如果只是单纯按照 6.1.2 修改登录IP,没有修改FTP服务器站点设置的话,将会出现如下莫名其妙的错误:
    enter ftpUpload
    *get* ''
    Traceback (most recent call last):
      File "AutoBackupMongoTest.py", line 64, in <module>
        ftp_res = ftpUpload(zip_des_name, ftpUploadFolder)
      File "AutoBackupMongoTest.py", line 42, in ftpUpload
        ftp.connect('172.16.7.107', 21)
      File "E:\Miniconda\lib\ftplib.py", line 155, in connect
        self.welcome = self.getresp()
      File "E:\Miniconda\lib\ftplib.py", line 234, in getresp
        resp = self.getmultiline()
      File "E:\Miniconda\lib\ftplib.py", line 220, in getmultiline
        line = self.getline()
      File "E:\Miniconda\lib\ftplib.py", line 208, in getline
        raise EOFError
    EOFError

    或者是如下错误:

    enter ftpUpload
    Traceback (most recent call last):
      File "AutoBackupMongoTest.py", line 63, in <module>
        ftp_res = ftpUpload(zip_des_name, ftpUploadFolder)
      File "AutoBackupMongoTest.py", line 41, in ftpUpload
        ftp.connect("192.168.0.101", 21)
      File "E:\Miniconda\lib\ftplib.py", line 152, in connect
        source_address=self.source_address)
      File "E:\Miniconda\lib\socket.py", line 722, in create_connection
        raise err
      File "E:\Miniconda\lib\socket.py", line 713, in create_connection
        sock.connect(sa)
    TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没
    有反应,连接尝试失败。
    
    展开全文
  • 解压缩文件 import zipfile import os files = zipfile.ZipFile('homework.zip', 'r') files.extractall(os.getcwd()) files.close() 打包成zip 但是,有时...

    https://blog.csdn.net/weixin_40957741/article/details/91126638

    解压缩文件

    import zipfile
    import os
    files = zipfile.ZipFile('homework.zip', 'r')
    files.extractall(os.getcwd())
    files.close()    
    

    打包成zip
    但是,有时可能还需要从笔记本中下载多个文件。有几种方法可以做到这一点,但最简单的方法是压缩目录并下载zip文件:

    import shutil
    shutil.make_archive(output_filename_dont_add_.zip, 'zip', directory_to_download)
    
    展开全文
  • python上传字符和二进制的文件PHP服务器本主要介绍通过Python向php服务器数据的代码实现上传简单的字符串def send_str_server(self): payload = {'key1': 'value1', 'key2': 'value2'} r = requests.post(...
  • 浏览器查看日志情况,可以看到树莓派通过SIM868模块确实将数据发送给了服务器!!!    参考资料:http://www.eefocus.com/communication/397109   转载于:...
  • ohcoach-cell-data-upload-server:将单元格中的gps和imu数据上传到python flask服务器
  • 使用python自动备份数据库并上传到七牛服务器(定期清除)。lnmp 的网站服务器上需要对数据库的数据进行备份,查了一些资料,然后用python写了一个七牛的数据备份的简单脚本,定时上传、删除过期的备份。
  • 每次想把服务器上的数据上传到百度云盘都要先下载本地,然后再上传百度云。 这一点都不优雅,既浪费时间,还占用电脑本来的带宽。 如果Linux命令行能够直接上传百度云盘岂不美哉?说干就干,磨刀不误砍柴工! ...
  • 如何使用Python编程实现定时自动上传Excel表格数据到服务器里的MySQL server数据库,困扰许久了,有没有哪位大神可以指点一二的,很着急,求指点,不胜感激。</p>
  • 整个系统架构如下: MQTT 和RocketMQ的区别: 1、传感器采用GPRS传输数据,采用微消息...传感器传送数据到阿里云Iot。MQTT支持Python,java,有相应的sdk,地址如下: https://help.aliyun.com/product/100...
  • 从2014年开始,作者主要写了三个...Python爬虫之Selenium+Phantomjs+CasperJSPython数据分析系列:知识图谱、web数据挖掘及NLP它们都是基于Windows系统下的Python编程,每个系列都从安装过程、基础知识实际应用三...
  • 2019独角兽企业重金招聘Python工程师标准>>> ...
  • 本地文件与服务器文件交互三、在服务器上运行python代码 一.连接服务器 本辣鸡小白,现在读研一,做的是数据挖掘方向,而之前从未有过接触服务器甚至连C语言都不太会,我本科都干了些什么? 目前刚接触算法半年,模型...
  • 一直使用pycharm写python代码,并且pycharm专业版的deployment可以直接将写好的代码上传到测试服务器指定目录,然后在服务器中运行代码,做模型的训练、测试和数据分析等工作。这样做的原因: 环境一致:最终项目...
  • 创业公司,但也逐渐积累了十多态服务器,有时候因为一点小疏忽,就导致了十多台服务器返工,刚开始会使用ssh一台一台登上去修改,或者scp、sftp一个一个上传,基本上只要发生一点错误,就会花去小半天时间,这不是最...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 261
精华内容 104
关键字:

python上传数据到服务器

python 订阅