小學Python3第四天

#!/bin/env python3
# -*- coding:utf8 -*-
# 學python3的第四天
# 查看幫助
'''
python的幫助:https://docs.python.org/zh-cn/3/
查看標準庫:裏面有 內置函數(就是內建)
'''
# shutil:實現文件的複製 剪切 刪除等操作
# 用底層模塊(低級模塊)
# import shutil
# f1 = open('/etc/shadow','rb')
# f2 = open('/tmp/sd','wb')
# shutil.copyfileobj(f1,f2)
# f1.close()
# f2.close()
# #直接拷貝文件(高級模塊)
# shutil.copy('/etc/hosts','/tmp')
# #拷貝目錄
# shutil.copytree('/etc/security','/tmp/wxk')
# #移動文件/目錄
# shutil.move('/tmp/wxk','/var/tmp/wxk')
# #刪除目錄(刪除文件用另一個os模塊)
# shutil.rmtree('/tmp/wxk')
# #改變文件的屬主屬組
# shutil.chown('/tmp/sd',user='bob',group='bob')
# help(shutil.chown())
# #subbprocess:可以調用任何系統命令
import subprocess

#
# #查看bob家目錄
# subprocess.run('ls -a ~bob',shell=True)
# #執行系統命令,將輸出保存到stdout變量中,錯誤輸出保存到stderr變量中
# #正確輸出stdout
# result = subprocess.run('ls -a ~bob',shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# print(result.stdout)
# print(result.stderr)
# print(result.returncode) #即$?
# #錯誤輸出stderr
# result1 = subprocess.run('id natasha',shell=True,stderr=subprocess.PIPE,stdout=subprocess.PIPE)
# print(result1.stdout)
# print(result1.stderr)
# print(result1.returncode) #即$?

# #練習
# resulto = subprocess.run('lscpu',shell=1==1,stdout=subprocess.PIPE)
# print(resulto.stdout)
# print(resulto.returncode)
#
# resulte = subprocess.run('sl',shell=True,stderr=subprocess.PIPE)
# print(resulte.stderr)
# print(resulte.returncode)

# #鏈式多重賦值(不可變)
# a = b =10
# print(a,b)
# b=20
# print(b)
# #列表可變
# alist = blist = [1, 2]
# print(alist)
# print(blist)
# blist[0] = 10
# print(blist)
# print(alist)
# #多元賦值
# a,b = 'xy'
# print(a,b)
# c,d = (10,20)
# print(c,d)
# e,f = ['hello','world']
# print(e,f)
# g,h = 100,200
# print(g,h)
# #交換兩個變量的值
# #python寫法
# a,b = 1, 100
# print(a,b)
# a,b =b,a
# print(a,b)
# #其語言寫法
# t = a
# a = b
# b = t
# print(a,b)
# 標識符:各種各樣的名稱,如:變量 函數 模塊 類,統稱爲標識符
# 合法標識符需要滿足的條件:區分大小寫....
# 關鍵字:爲了實現python語法 它保留了一些名字 叫關鍵字
# 關鍵字不能被覆蓋
# import keyword
# print(keyword.kwlist) #查看有哪些關鍵字
# #兩種辨別是不是關鍵字方法
# #1)
# test = 'pass' in keyword.kwlist
# print(test)
# #2)
# test2 = keyword.iskeyword('pass')
# print(test2)
# 內建(builtin_function_or_method):不是關鍵字,but也布建議覆蓋
# print(type(len))
# len = 10 #將len定義爲變量 賦值10
# len('123') #此時len不再是函數會報錯

# #模塊文件佈局
# #!/usr/bin/env python3 #解釋器
# """模塊說明文檔(可以當做特殊的註釋)
#
# 可用help幫助時顯示
# """
# "描述" #在模塊功能區寫說明
#
# import os #模塊導入
# import  time
#
# debug = True
# hi = 'hello world' #全局變量的定義
#
# class Mycalss: #類的定義
#     pass
#
# def func1(): #函數聲明
#     pass
#
# def func2():
#     pass

# #中午練習:時長一小時半
# import sys
#
# def copy(src_fname,dit_fname):
#     src_fobj = open(src_fname,'rb')
#     dst_fobj = open(dst_fobj,'wb')
#
#     while True:
#         data = src_fobj.read(4096)
#         if not data:
#             break
#         dst_fobj.write(data)
#
#     src_fobj.close()
#     dst_fobj.close()
#
# copy(sys.argv[1],sys.argv[2])
# #執行方式
# #cp_func.py /etc/hosts /tmp/zhuji.txt
# def mtable(n):
#     for i in range(1,n + 1):
#         for j in range(1,i + 1):
#             print('%sx%s=%s'% (j,i,j*i),end='')
#         print()
#
# mtable(6)
# mtable(9)
#
# hi = 'hello world'
#
# def pstar(n=50):
#     print('*'*n)
#
# if __name__ == '__main__':
#     pstar()
#     pstar(30)
# #在call_star.py中調用star模塊
# '''
# import star
#
# print(star.hi)
# star.pstar()
# star.pstar(30)
# '''
#
# from random import  choice
# import string
#
# all_chs = string.ascii_letters + string.digits
#
# def gen_pass(n=8):
#     result = ''
#
#
#     for i in range(n):
#         ch = choice(all_chs)
#         result += ch
#
#     return result
#
# if __name__ == '__main__':
#     print(gen_pass())
#     print(gen_pass(4))
#     print(gen_pass(10))
#
#
# from random import randint
#
# alist = list() #空
# list('hello') # ['h','e','l','l','o']
# list((10,20,30)) #[10,20,30]元組轉列表
# astr = str() #''
# str(10) #'10'
# str(['h','e','l','l','o'])
# num_list = [randint(1,100)for i in range(10)]
# max(num_list)
# min(num_list)
#
#
# # list(enumerate(alist))  # [(0, 10), (1, 'john')]
# #a,b = 0,10 #a -> 0 -> 10
#
# for ind in range(len(alist)):
#     print('%s:%s'% (ind,alist[ind]))
#
# for item in enumerate(alist):
#     print('%s: %s' % (item[0], item[1]))
#
# for ind,val in enumerate(alist):
#     print('%s:%s'% (ind,val))
#
# atuple = (96,97,40,75,58,34,69,29,66,90)
# sorted(atuple)
# sorted('hello')
# for i in reversed(atuple):
#     print(j,end='')
# 案例1:創建文件
# #import sys
# import subprocess
#
# filename = input('請輸入文件名: ')
# result = subprocess.run('touch %s'% filename,shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
# result.stdout
# if result.returncode == 0:
#     print('\033[1;33mCreated file %s is successful !\033[0m'% filename)
#     exit(1)
# #編寫功能函數---------------
# #!/bin/env python3
# '''記事本
#
# 用戶寫入文件內容
# '''
# import  os
#
# def get_fname():
#     '返回一個文件名字符串'
#     while True:
#         filename = input('Please input filename: ')
#         if not os.path.exists(filename):
#             break
#         print('Filename is not use,please re-enter! ')
#     return filename
#
# def get_content():
#     '返回文件內容的字符串列表'
#     content = []
#
#     print('請輸入內容,段讀輸入end表示結束.')
#     while True:
#         line = input('(end to quit)> ')
#         if line == 'end':
#             break
#         content.append(line)
#     return content
#
# def wfile(fname,content):
#     '將content中的內容寫入到fname'
#     with open(fname,'w') as file:
#         file.writelines(content)
#
# if __name__ == '__main__':
#     fname = get_fname()
#     content = get_content()
#     content = ['%s\n' % line for line in content] #解決content.append沒有\n問題
#     wfile(fname,content)
# 字符串詳解
# 序列對象
# #list轉成列表(能被一個一個取出來的)
# print(list('abc'))
# print(list(range(10)))
# #tuple將對象轉成元組
# print(tuple('abc'))
# print(tuple(range(10)))
# #str將對象轉換成字符串
# print(str(10))
# #內建函數
# #reversed函數用於反轉對象
# from random import  randint
# nums = [randint(1,100)for i in range(10)]
# print(reversed(nums)) #取出來默認二進制形式
# print(list(reversed(nums))) #轉換成二進制模式
# #sorted函數用於排序
# print(sorted(nums)) #不會改變形式只改變順序(從小到大)
# #enumerate同時得到下標和值
# print(list(enumerate(nums)))
# #循環輸出
# for data in enumerate(nums):
#     print(data)
# #多元賦值將下標和值分開
# for x,y in enumerate(nums):
#     print(x,y)
# #字符串
# s = '中'
# print(s)
# print(s.encode())
# b = s.encode() #將字符(str)轉成bytes類型
# c = b.decode() #將bytes類型轉換成str類型
# print(c)
# 字符串格式化操作符
# 基礎格式
# "" % () #如果只有一項需要替換()可以省略
# # %d表示需要用整數進行替換(無法替換字符串)
# print('%s is %d years old' % ('tom', 20))  # 數字用%d/%s 都行 字符串%s
# print('%8s%5s' % ('name', 'age'))  # 默認右對齊
# print('%-8s%-5s' % ('name', 'age'))  # 數字爲負則表示左對齊
# print('%#o' % 10)  # 轉8進制
# print('%#x' % 10)  # 轉16進制
# print('%f' % (5 / 3))
# print('%.2f' % (5 / 3))  # 保留2位小數
# print('%5.2f' % (5 / 3))  # 輸出總寬度爲5,小數位2位,不夠寬度補空格
# print('%e' % 10000)  # 科學計數法
# 字符串格式化還可以使用format方法
# a ='{} is {} years old'.format('bob',20)
# print(a)
# b = '{} is {} years old'.format(20, 'bob')
# print(b)
# c = '{1} is {0} years old'.format(20, 'bob')
# print(c)
# 案例2:創建用戶
# !/bin/env python3
# -*- coding:utf8 -*-
'''創建用戶

創建用戶並且生成隨機密碼
'''
# import  sys
# import subprocess
#
#
# def get_username():
#
#
# def get_password():
#
#
# def get_fname():
#
#
# def get_useradd(uname, ):
#
#
# if __name__ == '__main__':
#     uname = get_useradd()

# #張老師版本
# import sys
# import subprocess
# import randpass2
#
# def adduser(uname,passwd,fname):
#     #判斷用戶是是否存在
#     result = subprocess.run(
#         'if %s &>/dev/null' % uname,shell=True
#     )
#     if result.returncode == 0:
#         print('用戶已存在')
#         #函數遇到return就結束,不會在向下執行
#         return
#     #創建用戶 設置密碼
#     subprocess.run('useradd %s' % uname,shell=True)
#     subprocess.run(
#         'echo %s | passwd --stdin %s' % (passwd,uname),shell=True
#     )
#
#     #用戶名和密碼寫到文件中
#     info = '''用戶名:%s
# 密碼:%s
# ''' % (uname,passwd)
#     with open(fname,'a') as fobj:
#         fobj.write(info)
#
# if __name__ == '__main__':
#     uname = sys.argv[1]
#     fname = sys.argv[2]
#     passwd = randpass2.randpass()
#     adduser(uname,passwd,fname)
#     #python adduser.py zs /tmp/user.txt 將密碼寫入user.txt
#*****************************************************************
# #字符串方法
# #沒有字符串方法,判斷一個字符串是不是全爲數字
# a = input('data: ')
# for i in a:
#     if i not in '0123456789':
#         print(False)
#         break
#     else:
#         print(True)
# #**************************************
# # 用字符串方法判斷字符串中所有的字符是否爲數字
# a = '123a456'
# b = '123'
# print(a.isdigit())
# print(b.isdigit())
#
#
# #strip去除空白字符(\n\t都屬於空白字符,空格不算)
# hi = '  hello world   \t\n'
#
# print(hi.strip()) #去除兩邊
# print(hi.lstrip()) #去除左邊
# print(hi.rstrip()) #去除右邊
#
# hello = 'hello world hao 123'
# print('hello world hao 123'.split()) #切割字符串
# print('hello.world.hao.123'.split('.')) #切割以.爲分割的字符串
#
# c = ['hello', 'world', 'hao', '123']
# print('-'.join(c)) #用-拼接字符串
# print('hello world'.replace('l','a')) #將1替換爲a
# print(hi.center(20)) #居中
# print('hello'.center(20,'#'))
# print('hello'.ljust(20,'*')) #左對齊
# print('hello'.rjust(20,'*'))#右對齊
# print('hello'.upper()) #轉大寫
# print('hello'.lower()) #轉小寫
# print('hao123'.islower()) #字母都是小寫的麼?
# print('hao123'.isdigit()) #所有的字符都是數字麼?
# '''
# 完整的字符串方法參見:https://docs.python.org/zh-cn/3.6/library/stdtypes.html#text-sequence-type-str
# '''
#*****************************************************************
# #晚間練習
# alist = [10,'john']
# #list(enumerate(alist)) #[(0,10),(1,'john')]
# #a,b = 0,10 #a->0 b->10
#
# for ind in  range(len(alist)):
#     print('%s:%s'% (ind,alist))
#
# for item in enumerate(alist):
#     print('%s:%s'% (item[0],item[1]))
#
# for ind,val in enumerate(alist):
#     print('%s:%s'% (ind,val))
#
# atuple = (96, 97, 40, 75, 58, 34, 69 ,29, 66, 90)
# sorted(atuple)
# sorted('hello')
# for i in reversed(atuple):
#     print(i,end='')

# from random import randint

# alist = list() #空
# list('hello')
# list(10,30,20)
# astr = str()
# str(10)
# str(['h','e','l','l','o'])
# atuple = tuple()
# tuple('hello')

# num_list = [randint(1,100)for i in range(10)]
# max(num_list)
# min(num_list)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章