学Python的一些记录

原创
2017/04/25 14:02
阅读数 770

起因

老板今天反映某APP又挂了,问什么回事。由于那台是windows服务器(服务器我最讨厌windows,没有之一),直觉告诉我--服务器日志又满了。

果不其然,C盘空间只剩下900多K,这种事情已经不是头次了,公司也缺服务器点检和运维的人员,这事得想个办法一劳永逸。

我很自然的想到写段脚本定期去删除日志文件,非常简单,java和js都可以,但回头想想,前段时间不是老想学一下python吗,但苦于没有想写的东西,光看不入脑。我看,现在是个机会。

准备

知乎上看了一个pythoner的一些推荐,没有用现成的sublime去写脚本,我选择了用IDE,下了个pytharm,免费,应该挺好的。

python的话原来机器上就安装了2.7和3.6,在pytharm新建工程的时候选择了使用3.6的环境

搞起来

工程建好了,点击File菜单直接new了一个Python File,也就是常见的.py文件

百度了一下python的文件操作,嗯,用的是os.walk的api遍历文件夹,然后在遍历过程中用os.remove的api进行删除

代码如下:

#引入os包
import os


# 注释使用井号,嗯,蛮像一些配置文件的注释方法
# 定义一个变量,设置我要删除的文件夹
tempdir = 'c:' + os.sep + 'Windows' + os.sep + 'Temp'
# 打印信息到控制台
print('准备删除'+tempdir+'文件夹下的文件')
# 用os.walk遍历文件,并执行os.remove删除
for root, subdirs, files in os.walk(tempdir):
    for filename in files:
        print('正在删除文件:'+filename)
        # os.path.join是将路径与文件名合并,得到一个完整的文件地址
        os.remove(os.path.join(root, filename))

想想缺点什么,像java一样,运行一个java类得有main()方法呀?python是否也一样?百度了一下,版本2出来了

#引入os包
import os


# 定义一个方法
def deltempfile():
    # 定义一个变量,设置我要删除的文件夹
    tempdir = 'c:' + os.sep + 'Windows' + os.sep + 'Temp'
    # 打印信息到控制台
    print('准备删除'+tempdir+'文件夹下的文件')
    # 用os.walk遍历文件,并执行os.remove删除
    for root, subdirs, files in os.walk(tempdir):
        for filename in files:
            print('正在删除文件:'+filename)
            # os.path.join是将路径与文件名合并,得到一个完整的文件地址
            os.remove(os.path.join(root, filename))


# __name__是一个python变量,表示当前模块的名字,如果直接运行,那就是'__main__'
if __name__ == '__main__':
    deltempfile()

看样子不错,但严谨的我知道并没有那么简单,temp文件夹中经常有些临时文件是一些程序进程正在使用的,无法删除,这样子调用os.remove肯定会碰到抛错。我要把异常捕捉起来,再百度一下,版本3如下

#引入os包
import os


# 定义一个方法
def deltempfile():
    # 定义一个变量,设置我要删除的文件夹
    tempdir = 'c:' + os.sep + 'Windows' + os.sep + 'Temp'
    # 打印信息到控制台
    print('准备删除'+tempdir+'文件夹下的文件')
    # 用os.walk遍历文件,并执行os.remove删除
    for root, subdirs, files in os.walk(tempdir):
        for filename in files:
            print('正在删除文件:'+filename)
            try:
                # os.path.join是将路径与文件名合并,得到一个完整的文件地址
                os.remove(os.path.join(root, filename))
            except OSError:
                print('文件:'+filename+'被占用中,删除失败')


# __name__是一个python变量,表示当前模块的名字,如果直接运行,那就是'__main__'
if __name__ == '__main__':
    deltempfile()

到此大功告……一段落,接下来是部署

部署

这只是个自动维护的脚本,我也没空经常上服务器上跑一下这样子,那当然得让它每隔一段时间自动运行。windows服务器就这里方便些,打开自带的“计划任务”程序,添加一个计划任务,配置每周日执行一次,"python xxxxxxxxxx.py" (安装python后已配好Path变量,可以直接执行python命令),如下图

大功告成!手工往temp里丢一些文件,手工执行一下计划任务,完美!

归纳

python语法好简洁,但还算是很好理解的。代码行以回车分隔,并不需要像java一样打";"号。代码段用缩进处理,如java里边的for(){},到python只需要for xx in xxx: 以":"号标识一个代码段,的开始,以缩进控制代码段的结束。

其他倒没什么,就是变量定义不需要声明类型有点不习惯,所以说太简洁了!

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部