本站以分享各种运维经验和运维所需要的技能为主
《python》:python零基础入门学习
《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战
《k8》暂未更新
《docker学习》暂未更新
《ceph学习》ceph日常问题解决分享
《日志收集》ELK+各种中间件
《运维日常》持续更新中
操作步骤: 打开 , 读写 , 关闭
- # cp /etc/passwd /tmp/
- >>> f = open('/tmp/password') -----默认r模式,文件不存在则报错
- Traceback (most recent call last):
- File "
" , 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') # 打开非文本文件要加参数b
- f.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'
- >>> s1
- b'\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') ---一定要rb
-
- f = 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/ls
- a78c13d806e594dc4014d145d689f23d /tmp/list
-
-
- src_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'')为假,取反为真
- break
- else:
- 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 sys
- def 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'')为假,取反为真
- break
- else:
- 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/fstab
- 48ff680b643791cafc6d825ea978321f /tmp/cp.txt
一个以.py结尾的python文件就是一个模块
文件代码的物理组织形式,模块是逻辑形式
将文件名的.py扩展名去除,得到的就是模块名
模块名也是一个名词,它也要满足相关的约定(首字符:字母下划线,后续字母数字下划线)
- vim star.py
- hi = '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 string
- import random
- result = ''
- for i in range(1,n+1):
- #ms = str(random.choice(range(0,10)))
- inn = random.choice(range(0,94))
-
- all_str = string.printable
-
- result += all_str[inn]
- return result
-
- if __name__ == '__main__':
- print(mk_pass())
- print(mk_pass(4))
- print(mk_pass(10))
-
- 方法二:
-
- from random import choice
- import string
-
- all_str = string.printable
-
- def mk_pass2(n=8):
- result = ''
- for i in range(n):
- ch = choice(all_str)
- result += ch
- return result
-
- if __name__ == '__main__':
- print(mk_pass2())
- print(mk_pass2(4))
- print(mk_pass2(10))