本站以分享各种运维经验和运维所需要的技能为主
《python》:python零基础入门学习
《shell》:shell学习
《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战
《k8》暂未更新
《docker学习》暂未更新
《ceph学习》ceph日常问题解决分享
《日志收集》ELK+各种中间件
《运维日常》持续更新中
文件对象操作步骤: 打开 , 读写 , 关闭
open内建函数: 访问模式: # cp /etc/passwd /tmp/>>> f = open('/tmp/password') -----默认r模式,文件不存在则报错Traceback (most recent call last):File "<stdin>", line 1, in <module>FileNotFoundError: [Errno 2] No such file or directory: '/tmp/password'>>> f = open('/tmp/passwd')>>> data = f.f.buffer f.encoding f.isatty( f.newlines f.readlines( f.truncate(f.close( f.errors f.line_buffering f.read( f.seek( f.writable(f.closed f.fileno( f.mode f.readable( f.seekable( f.write(f.detach( f.flush( f.name f.readline( f.tell( f.writelines(>>> data = f.read() >>> data>>> data = f.read() 文件指针已到结尾,再读取将为空串-----指针没有回头草>>> data'' >>> f.close()>>> f = open('/tmp/passwd')>>> data = f.read()>>> data>>> f.read(4)---读取4字节'root'>>> f.read(6)---继续往后读6字节':x:0:0'>>> f.readline()读到换行符\n结束 ----类型是 str 字符类型>>> f.readlines()--# 把每一行数据读出来放到列表中 ':root:/root:/bin/bash\n'>>> data = f.readlines()>>> type(data)<class 'list'>>>> data###############最常用的读取文件的方法#################f = open('/tmp/passwd')for line in f:print(line, end='')f.close()##############################f = open('图片地址', 'rb') # 打开非文本文件要加参数bf.read(4096)f.close()[root@room9pc01 ~]# eog me1.png打开图片*************文本也可以用rb的方式打开*******#一个英文字符正好占一个字节,就用英文字符本身去显示但是一个汉子再utf9编码中占3字节,没有办法把一个字节表示成字符,所以就用16进制数表示# cat /tmp/a.txt hello一月份>>> f = open('/tmp/a.txt','rb')>>> f.read()b'hello\xe4\xb8\x80\xe6\x9c\x88\xe4\xbb\xbd\n'>>> s1 = b'\xe4\xb8\x80'>>> s1b'\xe4\xb8\x80'>>> s1.decode()'一'f.close()>>> s2 = '月'>>> s2.encode()b'\xe6\x9c\x88'*******************************************##################################f = open('/tmp/myfile', 'w') # 'w'打开文件,如果文件不存在则创建f.write('hello world!\n')f.flush() # 立即将缓存中的数据同步到磁盘f.writelines(['2nd line.\n', 'new line.\n'])f.close() # 关闭文件的时候,数据保存到磁盘##############################with语句结束时,自动关闭文件with open('/tmp/passwd') as f:print(f.readline())#########################移动指针的位置以及查看指针的位置--f = open('/tmp/passwd', 'rb') ---一定要rbf = open('/tmp/passwd')f.tell() # 查看文件指针的位置f.readline()f.tell()f.seek(0, 0) # 第一个数字是偏移量,第2位是数字是相对位置。# 相对位置0表示开头,1表示当前,2表示结尾f.seek(-5,2) #左为负 右为正f.tell()f.close() 拷贝文件: # f1 = open('/bin/ls', 'rb')# f2 = open('/tmp/list', 'wb')# # data = f1.read()# f2.write(data)# # f1.close()# f2.close()[root@room9pc01 tmp]# md5sum /bin/ls /tmp/list a78c13d806e594dc4014d145d689f23d /bin/lsa78c13d806e594dc4014d145d689f23d /tmp/listsrc_fname = '/bin/ls'dst_fname = '/tmp/list2'src_fobj = open(src_fname, 'rb')dst_fboj = open(dst_fname, 'wb')#就像商品供货的例子while 1:data = src_fobj.read(4096)if data == b'':#if len(data) == 0:#if not data : 空串(b'')为假,取反为真breakelse:dst_fboj.write(data)src_fobj.close()dst_fboj.close() 函数:使用def定义
调用函数务必使用()
函数一般都需要有一个返回值
返回值使用return关键字指定
没有return默认返回None
>>> def add():... result = 10 + 20... >>> a = add()>>> print(a)None------通过上面的例子可以知道,需要return返回值,不然只会默认输出None----###########函数############def mk_fib():fib = [0,1] #函数内部的变量是局部变量,只能在函数内使用n = int(input('长度: '))for i in range(n - 2):fib.append(fib[-1] + fib[-2])return fib#返回的是fib代表的列表,而不是返回变量a = mk_fib()#调用函数时,必须用(),调用函数就是执行函数的代码print(a)b = [i * 2 for i in a]print(b)with open('/tmp/fib.txt', 'w') as fobj:# 需要把列表转成str字符串后再写入文件,否则报错fobj.write(str(a))############################# 函数参数:
传递参数:
def mk_fib(n):fib = [0,1] #函数内部的变量是局部变量,只能在函数内使用for i in range(n - 2):fib.append(fib[-1] + fib[-2])return fib#返回的是fib代表的列表,而不是返回变量a = mk_fib(5)#调用函数时,必须用(),调用函数就是执行函数的代码print(a)b = [i * 2 for i in a]print(b)with open('/tmp/fib.txt', 'w') as fobj:# 需要把列表转成str字符串后再写入文件,否则报错fobj.write(str(a))n = int(input('长度: '))c = mk_fib(n)print(c) 位置参数:位置参数保存在sys模块的argv列表中
import sys
print(sys.argv)
# python3 01.py xixi haha 123
['01.py', 'xixi', 'haha', '123']
默认参数: ###默认参数###def pstar(num = 20):print('*' * num)pstar()pstar(50) 拷贝函数: import sysdef copy(src_fname, dst_fname):src_fobj = open(src_fname, 'rb')dst_fboj = open(dst_fname, 'wb')#就像商品供货的例子while 1:data = src_fobj.read(4096)if data == b'':#if len(data) == 0:#if not data : 空串(b'')为假,取反为真breakelse:dst_fboj.write(data)src_fobj.close()dst_fboj.close()copy(sys.argv[1],sys.argv[2])(nsd1907) [root@room9pc01 day03]# python 01.py /etc/fstab /tmp/cp.txt(nsd1907) [root@room9pc01 day03]# md5sum /etc/fstab /tmp/cp.txt 48ff680b643791cafc6d825ea978321f /etc/fstab48ff680b643791cafc6d825ea978321f /tmp/cp.txt 模块:一个以.py结尾的python文件就是一个模块
文件代码的物理组织形式,模块是逻辑形式
将文件名的.py扩展名去除,得到的就是模块名
模块名也是一个名词,它也要满足相关的约定(首字符:字母下划线,后续字母数字下划线)
vim star.pyhi = 'hello shabichao'def pstar(n=30):print('*' * n)>>> import star>>> star.star.hi star.pstar( >>> star.hi'hello shabichao'>>> star.pstar()******************************>>> star.pstar(50)************************************************** 导入模块: # import star # 常用# print(star.hi)# star.pstar()# from random import choice, randint # 常用# print(choice('abcd'))# print(randint(1, 100))# import sys, getpass # 不常用import getpass as gp # 导入模块时,给模块取别名,不常用upass = gp.getpass()print(upass) 模块特性: (nsd1907) [root@room9pc01 day03]# echo 'print(__name__)' > foo.py(nsd1907) [root@room9pc01 day03]# echo 'import foo' > bar.py(nsd1907) [root@room9pc01 day03]# cat foo.py print(_name_)(nsd1907) [root@room9pc01 day03]# cat bar.py import foo(nsd1907) [root@room9pc01 day03]# python3 foo.py __main__(nsd1907) [root@room9pc01 day03]# python3 bar.py foo#####################调用模块或者之后使用py脚本######################hi = 'hello shabichao'#全局变量之后才可以调用def pstar(n=30):print('*' * n)if __name__ == '__main__':print(hi)pstar()pstar(50) 生成随机密码:(作业) def mk_pass(n=8):import stringimport randomresult = ''for i in range(1,n+1):#ms = str(random.choice(range(0,10)))inn = random.choice(range(0,94))all_str = string.printableresult += all_str[inn]return resultif __name__ == '__main__':print(mk_pass())print(mk_pass(4))print(mk_pass(10))方法二:from random import choiceimport stringall_str = string.printabledef mk_pass2(n=8):result = ''for i in range(n):ch = choice(all_str)result += chreturn resultif __name__ == '__main__':print(mk_pass2())print(mk_pass2(4))print(mk_pass2(10))