####上下文管理器: 打开文件,执行完with语句内容之后,会自动关闭文件对象
with open('/tmp/passwd') as f: #上下文管理器: 打开文件,执行完with语句内容之后,会自动关闭文件
print(f.read()) #f是变量,度却变量并输出
with open('/tmp/passwd') as f1,open('/tmp/passwdbackup','w+') as f2: #打开两个变量
f2.write(f1.read()) #将f1读取的写入f2中
f2.seek(0) # f2将光标移到开始
print(f2.read()) #读取f2中的内容
##创建文件data.txt,共100000行,每行存放一个1~100之间的整数
import random #加载随机模块
f = open('data.txt',mode='w+') #打开文件,以读的方式
for i in range(100000): #循环100000次
f.write(str(random.randint(1,100)) + '\n') #每循环一次随机数摇一次,范围在1-100,一共100000次,然后要换行
f.seek(0) #将f的光标放到开始
print(f.read()) #将读取的内容输出
f.close() #关闭
#1.返回操作系统类型
import os #值为:posix,表示linux操作系统 如果nt,是windows操作系统
print(os.name)
info = os.uname() #系统的所有名字
print(info)
print(info.sysname) #系统的名称
print(info.nodename) #主机名
print(info.release) #内核
print(info.version) #版本号
print(info.machine) #硬件架构
##结果
posix
posix.uname_result(sysname='Linux', nodename='foundation71.ilt.example.com', release='3.10.0-514.el7.x86_64', version='#1 SMP Wed Oct 19 11:24:13 EDT 2016', machine='x86_64')
Linux
foundation71.ilt.example.com
3.10.0-514.el7.x86_64
#1 SMP Wed Oct 19 11:24:13 EDT 2016
x86_64
import os #值为:posix,表示linux操作系统 如果nt,是windows操作系统
print(os.environ) #环境变量
print(os.environ.get(‘PATH’)) #通过key值获取环境变量对应的value值.因为environ是以字典的形式输出的。可以用get
##结果
environ({'PATH': '/home/kiosk/PycharmProjects/python/venv/bin:/usr/local/python3/bin:/usr/local/python3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin', 'XAUTHORITY': '/run/gdm/auth-for-kiosk-H1dEqN/database', 'LC_MEASUREMENT': 'zh_CN.utf8', 'IMSETTINGS_MODULE': 'IBus', 'HISTCONTROL': 'ignoredups', 'NO_PROXY': 'localhost,127.0.0.0/8,::1', 'XMODIFIERS': '@im=ibus', 'GDMSESSION': 'gnome-classic', 'LC_TIME': 'zh_CN.utf8', 'DBUS_SESSION_BUS_ADDRESS': 'unix:abstract=/tmp/dbus-5N8zwBCXKg,guid=2a50aa068ce4f0fcdebfb2945d781030', 'PS1': '(venv) ', 'XDG_CURRENT_DESKTOP': 'GNOME-Classic:GNOME', 'MAIL': '/var/spool/mail/kiosk', 'SSH_AGENT_PID': '1657', 'USERNAME': 'kiosk', 'SESSION_MANAGER': 'local/unix:@/tmp/.ICE-unix/1493,unix/unix:/tmp/.ICE-unix/1493', 'LC_PAPER': 'zh_CN.utf8', 'LOGNAME': 'kiosk', 'PWD': '/home/kiosk/PycharmProjects/python', 'PYCHARM_HOSTED': '1', 'WINDOWID': '33554439', 'PYTHONPATH': '/home/kiosk/PycharmProjects/python', 'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'SHELL': '/bin/bash', 'OLDPWD': '/usr/local/pycharm-community-2019.2.1/bin', 'GNOME_DESKTOP_SESSION_ID': 'this-is-deprecated', 'VIRTUAL_ENV': '/home/kiosk/PycharmProjects/python/venv', 'IMSETTINGS_INTEGRATE_DESKTOP': 'yes', 'XDG_SESSION_DESKTOP': 'gnome-classic', 'LS_COLORS': 'rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:.tar=38;5;9:.tgz=38;5;9:.arc=38;5;9:.arj=38;5;9:.taz=38;5;9:.lha=38;5;9:.lz4=38;5;9:.lzh=38;5;9:.lzma=38;5;9:.tlz=38;5;9:.txz=38;5;9:.tzo=38;5;9:.t7z=38;5;9:.zip=38;5;9:.z=38;5;9:.Z=38;5;9:.dz=38;5;9:.gz=38;5;9:.lrz=38;5;9:.lz=38;5;9:.lzo=38;5;9:.xz=38;5;9:.bz2=38;5;9:.bz=38;5;9:.tbz=38;5;9:.tbz2=38;5;9:.tz=38;5;9:.deb=38;5;9:.rpm=38;5;9:.jar=38;5;9:.war=38;5;9:.ear=38;5;9:.sar=38;5;9:.rar=38;5;9:.alz=38;5;9:.ace=38;5;9:.zoo=38;5;9:.cpio=38;5;9:.7z=38;5;9:.rz=38;5;9:.cab=38;5;9:.jpg=38;5;13:.jpeg=38;5;13:.gif=38;5;13:.bmp=38;5;13:.pbm=38;5;13:.pgm=38;5;13:.ppm=38;5;13:.tga=38;5;13:.xbm=38;5;13:.xpm=38;5;13:.tif=38;5;13:.tiff=38;5;13:.png=38;5;13:.svg=38;5;13:.svgz=38;5;13:.mng=38;5;13:.pcx=38;5;13:.mov=38;5;13:.mpg=38;5;13:.mpeg=38;5;13:.m2v=38;5;13:.mkv=38;5;13:.webm=38;5;13:.ogm=38;5;13:.mp4=38;5;13:.m4v=38;5;13:.mp4v=38;5;13:.vob=38;5;13:.qt=38;5;13:.nuv=38;5;13:.wmv=38;5;13:.asf=38;5;13:.rm=38;5;13:.rmvb=38;5;13:.flc=38;5;13:.avi=38;5;13:.fli=38;5;13:.flv=38;5;13:.gl=38;5;13:.dl=38;5;13:.xcf=38;5;13:.xwd=38;5;13:.yuv=38;5;13:.cgm=38;5;13:.emf=38;5;13:.axv=38;5;13:.anx=38;5;13:.ogv=38;5;13:.ogx=38;5;13:.aac=38;5;45:.au=38;5;45:.flac=38;5;45:.mid=38;5;45:.midi=38;5;45:.mka=38;5;45:.mp3=38;5;45:.mpc=38;5;45:.ogg=38;5;45:.ra=38;5;45:.wav=38;5;45:.axa=38;5;45:.oga=38;5;45:.spx=38;5;45:*.xspf=38;5;45:', 'SHLVL': '3', 'LC_MONETARY': 'zh_CN.utf8', 'QT_IM_MODULE': 'ibus', 'HISTSIZE': '1000', 'TERM': 'xterm-256color', 'LANG': 'zh_CN.utf8', 'XDG_SESSION_ID': '1', 'DISPLAY': ':0', '_': '/usr/local/pycharm-community-2019.2.1/jbr/bin/java', 'no_proxy': 'localhost,127.0.0.0/8,::1', 'GDM_LANG': 'zh_CN.utf8', 'PYTHONIOENCODING': 'UTF-8', 'DESKTOP_SESSION': 'gnome-classic', 'GPG_AGENT_INFO': '/run/user/1000/keyring/gpg:0:1', 'USER': 'kiosk', 'XDG_MENU_PREFIX': 'gnome-', 'WINDOWPATH': '1', 'VTE_VERSION': '3804', 'LC_NUMERIC': 'zh_CN.utf8', 'XDG_SEAT': 'seat0', 'SSH_AUTH_SOCK': '/run/user/1000/keyring/ssh', 'PYTHONUNBUFFERED': '1', 'HOSTNAME': 'foundation71.ilt.example.com', 'GNOME_SHELL_SESSION_MODE': 'classic', 'XDG_RUNTIME_DIR': '/run/user/1000', 'XDG_VTNR': '1', 'HOME': '/home/kiosk'})
/home/kiosk/PycharmProjects/python/venv/bin:/usr/local/python3/bin:/usr/local/python3/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/kiosk/.local/bin:/home/kiosk/bin
######操作系统
import os #模块os系统
import random #随机数
from os.path import exists,splitext,join #系统路径查看文件是否存在,相连,分离
print(os.path.isabs('/tmp/hello')) #判断是否为绝对路径
print(os.path.isabs('hello')) #是否右hello这个绝对路径
print(os.path.abspath('hello.png')) #输出一个绝对路径
print(os.path.join('/home/kiosk','hello.png'))#指定一个绝对路径
print(os.path.join(os.path.abspath('.'),'hello.jpg'))#另一种表现方式
#结果
True
False
/home/kiosk/PycharmProjects/python/hello.png
/home/kiosk/hello.png
/home/kiosk/PycharmProjects/python/hello.jpg
######.获取目录名或者文件名
import os #模块os系统
import random #随机数
from os.path import exists,splitext,join #系统路径查看文件是否存在,相连,分离
filename = '/home/kiosk/桌面/day06/hello.png' #给一个文件路径
print(os.path.basename(filename)) #获取文件路径中的名字
print(os.path.dirname(filename)) #文件所在的文件夹名字
####创建目录/删除目录
os.mkdir('abc')
#创建递归目录
os.makedirs('img/file')
os.rmdir('abc') #我们删除
os.mkdir('abc') #再次创建。结果是只展示一次abc
#6.文件重命名
import os #模块os系统
import random #随机数
from os.path import exists,splitext,join #系统路径查看文件是否存在,相连,分离
print(os.system('ls')) #查看目录下右些什么
os.rename('data1111.txt','data.txt') #重命名
print(os.system('ls')) #查看结果
##结果
abc
data1111.txt
img
python2.py
test.py
venv
0
abc
data.txt
img
python2.py
test.py
venv
0
print(os.path.exists('imgs')) #判断文件或目录是否存在
print(os.path.exists('data.txt'))
print(os.path.splitext('hello.jpg'))#分离后缀名和文件名
print(os.path.split('/tmp/hello/hello.jpg'))#将目录名和文件名分离
##结果
False
True
('hello', '.jpg')
('/tmp/hello', 'hello.jpg')
#两个模块
import os
from os.path import join
#遍历指定目录下的所有内容
for root,dir,files in os.walk('/var/log'):
print(root) #输出所有
print(dir) #输出文件夹
print(files) #输出是文件
for name in files: #遍历
print(join(root,name)) #将文件的的名称与/var/log的下的目录连起来
京东二面笔试题1. 生成一个大文件ips.txt,要求1200行每行随机为172.25.254.0/24段的ip;2. 读取ips.txt文件统计这个文件中ip出现频率排前10的ip;
import random #定义模块
def create_ip_file(filename): #第一个函数,生成后面的随机字符,并相连
ip = ['172.25.254.' + str(i) for i in range(1,255)]
# print(random.sample(ip,1))
with open(filename,'a+') as f: #用with方式写入文件,并相连
for i in range(1200):
f.write(random.sample(ip,1)[0] + '\n')create_ip_file('ips.txt')#
def sorted_by_ip(filename,count=10): #这个函数是读却数所有的函数,选出前10个
ips_dict = dict() #定义一个工厂函数
with open(filename) as f: #用with方式看文件
for ip in f: #ip来便利文件f
ip = ip.strip()
if ip in ips_dict: #产看文件是否在典中
ips_dict[ip] += 1 #在加1
else:
ips_dict[ip] = 1 #不再的花变成1
sorted_ip = sorted(ips_dict.items(),key=lambda x:x[1],reverse=True)[:count]
#这一步使用匿名函数取出字典的value值数字从达到小到大排序
return sorted_ip #返回值print(sorted_by_ip('ips.txt'))
练习:# 1. 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)# 2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
#各模块
import random
import string
import os
from os.path import splitextdef gen_code(len=4):
li = random.sample(string.ascii_letters + string.digits,len)
return ''.join(li)def create_files():
li = [gen_code() for i in range(100)]
os.mkdir('img')
for i in li:
os.mknod('img/' + i + '.png')create_files()def modify_suffix(dirname,old_suffix,new_suffix):
#找出以png结尾的文件名,使用过滤器的方法,查找文件的末尾名称。匿名函数的方式,最后返回文件名
pngfile = filter(lambda filename:filename.endswith(old_suffix),os.listdir(dirname))
#分离文件名和后缀,分离的是筛选出来的
basefiles = [os.path.splitext(filename)[0] for filename in pngfile]
#文件重命名
for filename in basefiles: #文件filename在分离之后的中便利
oldname = os.path.join(dirname,filename + old_suffix) #将原来的文件名响亮
newname = os.path.join(dirname,filename + new_suffix) #将文件与新的文件后名相连
os.rename(oldname,newname) #替换文件后面的后坠
print('%s重命名为%s成功' %(oldname,newname))modify_suffix('img','.png','.jpg')
生成100个MAC地址并写入文件中,MAC地址前6位(16进制)为01-AF-3B
01-AF-3B
01-AF-3B-xx
01-AF-3B-xx-xx
01-AF-3B-xx-xx-xx
import random #随即数模块
import string #字符串模块
def create_mac(): #函数身成随机的字符
MAC ='01-AF-3B'
hex_num = string.hexdigits
for i in range(3):
n = random.sample(hex_num,2) ##生成两个随即的
sn = '-'+''.join(n).upper() #转换成大写的并且相连
MAC += sn #Mac自己王后延伸
return MAC #返回值
def main(): #此函数是打开一个文件将上边随即生成的,写入里面
f = open('mac.tex','w') #打开
for i in range(100): #循环100次
mac = create_mac() #将生成的随机给与mac这个变量
print(mac) #打印出来mac
f.write(mac + '\n') #将mac写入f这个变量所代表的mac.tex中
main()
import os
import timetime1 = os.path.getctime('/etc/shadow') #取得文件内容或属性最后一次被修改的文件时间
print(time1) #打印的时间
tuple_time = time.localtime(time1) #将其转换位我们能看的时间
print(tuple_time)
##结果
1564784111.706422
time.struct_time(tm_year=2019, tm_mon=8, tm_mday=3, tm_hour=6, tm_min=15, tm_sec=11, tm_wday=5, tm_yday=215, tm_isdst=0)
###时间之间的转换
import os
import time
#把元组时间转换为时间戳
tuple_time = time.localtime()
print(tuple_time) #输出时间元组
print(time.mktime(tuple_time)) #将元组转换为时间戳
把元组时间转换成字符串时间
print(time.strftime('%m-%d',tuple_time)) #只有月和天
print(time.strftime('%Y-%m-%d',tuple_time)) #年月天
print(time.strftime('%T',tuple_time)) #时间
print(time.strftime('%F',tuple_time)) #年月天
将时间戳类型转换为字符串时间
pwd_time = os.path.getctime('/etc/passwd') #将读取的时间戳给pwd_time
print('pwd_time',pwd_time) #时间戳
print(time.ctime(pwd_time)) #字符串时间转换方法
将时间戳转换为元组
print(time.localtime(pwd_time))
##应用案例——系统监控
需求:
1.获取当前主机信息: 操作系统名, 主机名, 内核版本, 硬件架构
2.获取开机时长和开机时间
3.获取当前登录用户
import os
import psutil
from datetime import datetimeprint('主机信息'.center(50,'*'))
info = os.uname()print("""
操作系统: %s
主机名称: %s
内核版本: %s
硬件架构: %s
"""%(info.sysname,info.nodename,info.release,info.machine))print('开机信息'.center(50,'*'))
boot_time = psutil.boot_time()
#将时间戳转换为datetime类型时间
boot_time_obj = datetime.fromtimestamp(boot_time)now_time = datetime.now()delta_time = now_time - boot_time_objprint('开机时间:',boot_time_obj)
print('当前时间:',str(now_time).split('.')[0])
print('开机时长:',str(delta_time).split('.')[0])print('当前登录用户'.center(50,'*'))
login_user = psutil.users()
info = psutil.users()[0]
print(info.name)
##itchat
利用itchat模块给手机助手发信息及文件
import os
import [email protected]_register(itchat.content.TEXT,isFriendChat=True)#调用python中已有模块
def text_reply(msg):
if msg['ToUserName'] == 'filehelper': #如果用户信息正确
#获取要执行的命令内容
comand = msg['Content'] #将内容给comand
#系统执行代码
if os.system(comand) == 0:
res = os.popen(comand).read() #度取
result = '[返回值]-命令%s执行成功,执行结果: \n' + res #成功的将信息发给文件助手
itchat.send(result,'filehelper') #发送信息给文件助手
else:
result = '[返回值]-命令%s执行失败,请检查命令: \n' %(comand) #返回失败的情况
itchat.send(result,'filehelper')itchat.auto_login()
itchat.run()
利用图灵机器人进行好友聊天
import itchat
import requestsdef get_tuling_response(info):
print(info)
api_url = 'http://www.tuling123.com/openapi/api' #图灵机器人的网站来源
data = {
'key':'38510258c5374c50809e3e15526d988d', #设置图灵机器人后的连接的接口
'info':_info,
'userid':'boy' #机器人的名字
}
res = requests.post(api_url,data).json() #发送数据到指定的网址,并获取网站返回的数据
print(res['text']) #打印返回的的消息
return res['text'] #将消息返回
get_tuling_response('你在干什么')
get_tuling_response('到处都是好玩的')
##结果
你在干什么
准备和你聊天吧
到处都是好玩的
亲爱的,当天请求次数已用完。