一道python考题:每隔10天在文件里搜索名单上的文件,压缩上传到远程服务器

最近遇到一道考题,写完记录下来。
题目是:每隔10天在文件里搜索名单上的文件,压缩上传到远程服务器

解题分四个阶段:

  1. 文件搜索
    os.listdir(path)
    查看指定path下的文件,一般结合os.path.isfile(path)(是否为文件)使用递归对目录进行遍历
    使用介绍 http://www.runoob.com/python/os-listdir.html

Tips:
• 连接文件夹和文件
• os.path.join(root,filename)

os.walk(top, topdown=True, οnerrοr=None, followlinks=False)
一般只传入第一个参数,即要遍历的路径,topdown指明遍历的顺序,该方法对于每个目录返回一个三元组,(dirpath, dirnames, filenames)。第一个是路径,第二个是路径下面的目录,第三个是路径下面的非目录(对于windows来说也就是文件)。通过for循环即可完成目录的递归了。
使用介绍 http://www.runoob.com/python/os-walk.html

glob.glob(path)
返回所有匹配的文件路径列表。它只有一个参数path,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。

  1. 压缩文件
    zipfile 模块用来处理压缩解压文件。
    is_zipfile用来判断是否是压缩文件,ZipFile压缩文件,write向压缩文件添加文件。

  2. 上传文件
    paramiko模块用来建立和服务器连接,可以向服务器发送命令,上传和下载文件。

  3. 间隔运行
    可以利用crontab执行一个10天运行一次该脚本。

代码:
import os
import zipfile
import glob
import paramiko

if name == “main”:
path = “/test”
serachFileName = “test.txt”
zipfilename= “/test/test.zip”
remoteFile = “/root/test.zip”

# test login server successfully
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect("192.168.1.1", 22, "root", "xxx")
stdin, stdout, stderr = ssh.exec_command("ls")
print(stdout.readlines())
ssh.close()

#上传文件的方式和发送命令的方式不一样。
t = paramiko.Transport(("192.168.1.1", 22))
t.connect(username="root", password="x")
sftp = paramiko.SFTPClient.from_transport(t)

for root, dirs, files in os.walk(path, topdown=False):
    if serachFileName in files:
        file = os.path.join(root, serachFileName)
        z = zipfile.ZipFile(zipfilename, 'w')
        print(file)
        z.write(file, serachFileName)
        print(z.filelist)
        z.close()
        print(zipfilename)
        sftp.put(zipfilename, remoteFile)
t.close()

#以上结束。下面是一些探索

# 可以找到所有文件夹下符合该条件的文件
pathList = glob.glob(os.path.join('/', path, "test*"))
print(pathList)

# 只能找当年目前下文件,不能文件夹内部文件夹遍历
for file in os.listdir(path):
    if file == serachFileName:
        print(file)

github code:
https://github.com/szhmery/algorithms/blob/master/exam/zipUploadFile.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值