Python练习(六)——文件操作

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())

运行结果:
Python练习(六)——文件操作_第1张图片

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)

你可能感兴趣的:(Python练习,Python)