1.ip存储与读取文件统计ip频率
需求1.生成一个大文件ips.txt,要求120000行,每行随即为
172.25.254.0/24段的ip;
2.读取ips.txt文件统计这个文件中ip出现频率前10的ip;
##方法一:
import random
def Creat_ips_file(filename):
ips = ['172.25.254.' + str(i) for i in range(256)]
with open(filename, 'w') as file_ip:
for count in range(120000):
file_ip.write(random.sample(ips, 1)[0] + '\n')
def Sorted_count_ip(filename, count=10):
ips_dict = dict()
with open(filename) as file_ip:
for IP in file_ip:
if IP in ips_dict:
ips_dict[IP] += 1
else:
ips_dict[IP] = 1
# ips_dict.items() 可以字典变为列表嵌套元组的数据结构,
# 其中列表的每一个元素都是一个有key和其对应的value值组成的元组,
# 我们使用每个元组的[1]个元素为依据进行排序return sorted_ip
sorted_ip = sorted(ips_dict.items(), key=lambda x: x[1], reverse=True)[:count]
return sorted_ip
Creat_ips_file('/villa/ips.txt')
for IP in Sorted_count_ip('/villa/ips.txt', 10):
print(IP[0])
##方法二:
import random
def create_file(filename = 'ips.txt'):
ips = ['172.25.254.'+ str(random.randint(1,254)) + '\n' for i in range(120000)]
with open(filename,'w') as f:
for ip in ips:
f.write(ip)
#防止文件过大传输失败,一行一行传输
from collections import Counter
def sort_by_ip_count(filename='ips.txt'):
with open(filename) as f:
ipcount = Counter(f)
return [ip[0].strip() for ip in ipcount.most_common(10)]
# create_file()
print(sort_by_ip_count())
2.更改后缀名
需求
1. 在当前目录新建目录img, 里面包含100个文件, 100个文件名各不相同(X4G5.png)
2. 将当前img目录所有以.png结尾的后缀名改为.jpg.
import string
def gen_code(len=4):
# 随机生成4位的验证码
li = random.sample(string.ascii_letters+string.digits, len)
# 将列表元素拼接为字符串
return "".join(li)
def create_files():
# 随机生成100个验证码
li = {gen_code() for i in range(100)}
os.mkdir('img')
# # 随机生成四个数字
for name in li:
os.mknod('img/' + name + '.png')
def modify_suffix(dirname, old_suffix, new_suffix):
"""
:param dirname: 操作的目录
:param old_suffix: 原先的后缀名
:param new_suffix: 新的后缀名
:return:
"""
# 1. 判断查找的目录是否存在, 如果不存在, 显示报错
if exists(dirname):
# 2. 找出所有以old_suffix(.png)结尾的
# pngfiles = [ filename for filename in os.listdir(dirname)
# if filename.endswith(old_suffix)]
pngfiles = filter(lambda filename: filename.endswith(old_suffix), os.listdir(dirname))
# 3. 将文件名和后缀名分开, 留下所有的文件名
basefiles = [splitext(filename)[0] for filename in pngfiles]
print(basefiles)
# 4. 文件重命名
for filename in basefiles:
# 需要加上目录名
oldname = join(dirname, filename+old_suffix)
newname = join(dirname, filename+new_suffix)
os.rename(oldname, newname )
print("%s重命名为%s成功" %(oldname, newname))
else:
print("%s不存在, 不能操作......" %(dirname))
# 如果该脚本没有被调用, 则执行下面的代码;
if __name__ == '__main__':
# **** 如何在执行脚本时, 接收用户传入的参数;
# 判断用户传的参数是否为3个参数?
import optparse # import argparse
# 实例化对象
parser = optparse.OptionParser()
# add_option, ‘-d’, 选项的短名称,
# dest: 接收-d后面的参数, 存放到变量dirname里面, type指定传递的数据类型.
parser.add_option('-d', '--dirname', dest='dirname', type=str)
parser.add_option('-o', '--oldSuffix', dest='oldSuffix', type=str)
parser.add_option('-n', '--newSuffix', dest='newSuffix', type=str)
(opt, args) = parser.parse_args()
modify_suffix(opt.dirname, opt.oldSuffix, opt.newSuffix)