开发者学堂课程【面向运维的 python 脚本速成 -1024程序员节创造营公益课:Python DAY 1】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/895/detail/14305
Python DAY 1
目录:
一、 Bash 和 Python 的对比
二、 为什么用 python?
三、 Python 的基本安装
四、 Python 的核心语法回顾 – 注释
五、 Python 的核心语法回顾 – 定义变量
六、 Python 的核心语法回顾 – 输入内容
七、 Python 的核心语法回顾 – 输出内容
八、 Python 的核心语法回顾 – IF 逻辑
九、 Python 的核心语法回顾 – 文件读取
十、 Python 的核心语法回顾 – 定义函数
十一、 Hello world 回顾
十二、 sys 模块简介
十三、 input 获取输入
十四、 列出目录下的内容
十五、 高级文件名搜索
十六、 获取目录下文件的属性
十七、 创建目录
十八、 删除目录或文件
十九、 打包和解压文件
一、 Bash 和 Python 的对比
二、为什么是 Python?
l 大趋势下, 运维工程师需要掌握一门开发语言,以便更好的和研发工程师配合
l Python 是一门脚本语言,可以帮助运维工程师以 Bash 的基础,快速完成开发
l Python 应用场景较广,可以编写 B/S 模式的应用,也可以编写 C/S 模式应用,还可以编写脚本 CLI
l 大量的运维工具都使用 Python 或为 Python 提供了很好的支持 (saltstack、fabric、python-libvirt、supervisor、openstack)
三、Python 的基本安装
l Python 官网可安装
l 本地的包管理器可以安装 apt install python / yum install python
l 源码安装
四、Python 的核心语法回顾 – 注释
#!/usr/bin/python3
#!/bin/bash
# 第一个注释#This is a single-line comment in Bash Script.
# 第二个注释echo "Enter your name:"
read name
'''
echo
第三注释
#echo output, its also a single line comment
第四注释
echo "The current user name is "$name""
'''
#This is another single line comment
"""
第五注释
第六注释
"""
print ("Hello, Python!")
五、Python 的核心语法回顾 – 定义变量
word = '字符串'
Variable_name=value
sentence = "这是一个句子。"
paragraph = """这是一个段落,
可以由多行组成"""
六、Python 的核心语法回顾 – 输入内容
Python:
str = input(“please input:”)
bash:
echo “please input:”
read str
七、Python 的核心语法回顾 – 输出内容
print(”abc”)
echo $abc
八、Python 的核心语法回顾 – IF 逻辑
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
if [ condition ];
then
<if block commands>
else
<else block commands>
Fi
九、Python 的核心语法回顾 – 文件读取
file = open(“filename”)
lines=f.read()
print(lines)
content=`cat filename`
十、Python 的核心语法回顾 – 定义函数
def functionname( parameters ):
"函数_文档字符串"
function_suite
return [expression]
[ function ] funname [()]
{
action;
[return int;]
}
十一、Hello world 回顾
1.输出 hello world 文本。� 使用 print 函数输出文本。
2.让用户输入名字,然后输出带名字的问候语。� 使用 input 函数获取用户的输入,使用变量保存输入值。
print('hello world')
name = input('Please tell me your name:')
print('Hello and welcome', name)
•input 函数获取运行环境中用户的输入,程序挂起等待输入完成。
•print 函数提供了往标准输出打印指定的内容。
•读取文件的内置函数是 open(filename, mode),可读取文件内容供处理,也提供了写入文件的方法。
十一、sys 模块简介
•sys 模块是 Python 标准库内置的,它提供了一些变量和函数,被解释器所使用。
•Python 脚本执行时可以传入参数。
•python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
•代码里获取参数需要通过 sys 模块实现。
import sys
print('Number of arguments:', len(sys.argv))
print('Argument list:', str(sys.argv))
% python3 script-io.py 1 a
Number of arguments: 3
Argument list: ['script-io.py', '1', 'a']
十二、open 函数简介
•open(file, mode=‘r’, …) 函数打开 file 并返回对应的文件对象。
•默认返回读取的文本内容。
•可指定 mode 用来写入文件而作为输出。
with open('data.txt') as f:
print(f.read())
with open('data.txt', mode='w') as f:
f.write('this is the new content will write to the file')
十三、input 获取输入
•函数定义:input([prompt])
•prompt 为可选参数,如果指定了 prompt,则 Python 运行时将它输出到标准输出,比如终端 Shell。
•然后程序暂停等待用户的键盘输入,按下回车后继续执行。
•所以录入的内容被读取为字符串。
>>> s = input()
hello
>>> s
'hello'
>>> name = input("What's your name?")
What's your name?AliAli
>>> name
‘
AliAli'
>>>
要读取为数字,则需要调用转换函数。
•有时候需要将输入作为数字。
•请使用转换函数进行转换:
•int()
•float()
>>> age = input('Enter your age:')
Enter your age:34
>>> dob = 2021 - age
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'int' and 'str'
>>> age = int(input('Enter your age:'))
Enter your age:34
>>> dob = 2021 - age
>>> dob
1987
十四、列出目录下的内容
• os.listdir 函数
• 返回一个文件名的列表,功能单一。
>>> import os
>>> entries = os.listdir('.')
>>> entries
['hello.py', '.DS_Store', '.venv', '.vscode', 'data', 'fileio.py']
>>>
•新:os.scandir 函数
•返回一个迭代器,元素包含了除文件名以外,还有文件类型、文件属性等信息。推荐使用。
>>> import os
>>> entries = os.scandir('.')
>>> entries
<posix.ScandirIterator object at 0x10cd4f340>
>>> entries.close()
>>> with os.scandir('.') as entries:
... for entry in entries:
... print(entry.name)
...
...
...
hello.py
.DS_Store
.venv
.vscode
data
fileio.py
>>>
仅列出目录下的文件
•新:os.scandir 函数
•判断文件属性,过滤选择文件。
>>> from pathlib import Path
>>> basepath = Path(basepath)
>>> basepath
PosixPath('.')
>>> files = (entry for entry in basepath.iterdir() if entry.is_file())
>>> for item in files:
...print(item.name)
...
...
hello.py
.DS_Store
fileio.py
>>>
十五、高级文件名搜索
•glob 模块提供了 Unix 风格的路径名模式匹配
>>> import glob
>>> glob.glob('*.py')
['hello.py', 'fileio.py']
>>> for file in glob.iglob('**/*.txt', recursive=True):
... print(file)
...
...
data0.txt
data/data3.txt
data/data2.txt
>>>
十六、获取目录下文件的属性
•新:os.scandir 函数
•使用了日期格式化
from datetime import datetime
from os import scandir
def convert_date(timestamp):
d = datetime.utcfromtimestamp(timestamp)
formated_date = d.strftime('%Y-%m-%d‘)
return formated_date
def get_files(path):
dir_entries = scandir(path)
for entry in dir_entries:
if entry.is_file():
info = entry.stat()
print(f'{entry.name}\t Last Modified: {convert_date(info.st_mtime)}')
get_files('./’)
hello.py Last Modified: 2021-05-13
.DS_Store Last Modified: 2021-05-13
fileio.py Last Modified: 2021-05-14
十七、创建目录
•os.makedir 函数
•可以嵌套多层路径,文件夹已存在会抛出异常
>>> import os
>>> os.mkdir('./data')
Traceback (most recent call last):
File "<input>", line 1, in <module>
os.mkdir('./data')
FileExistsError: [Errno 17] File exists: './data'
>>>
>>>
十八、删除目录或文件
•os.rmdir 函数删除目录
•os.remove 函数删除文件
>>> import os
>>> os.rmdir('data/json')
>>> os.remove('data/data1.txt')
>>> os.rmdir('data')
Traceback (most recent call last):
File "<input>", line 1, in <module>
os.rmdir('data')
OSError: [Errno 66] Directory not empty: 'data'
>>>
十九、打包和解压文件
•tarfile 模块用来处理 TAR 文件
>>> import tarfile
>>> with tarfile.open('src.tar.gz', mode='w:gz') as tar:
... tar.add('hello.py')
... tar.add('fileio.py')
...
...
>>> with tarfile.open('src.tar.gz', mode='r:gz') as tar:
... for member in tar.getmembers():
... print(member.name)
...
...
...
hello.py
fileio.py
>
>>