zoukankan      html  css  js  c++  java
  • 格式化文件转对象

    格式化文件转对象

    爬虫构造请求头时,需要用到字典,在浏览器F12查看请求头,发现是类字典冒号分割文本,将其直接复制到本地文件,转化为字典对象,可拿来直接使用.代码是具有可扩展性的,需要其他格式转化为对象时,只用增加转化函数,自动提供文件名处理,持久化导入导出功能.

    代码如下:

    '''
    文本格式化转换,并提供将其持久化的导入导出功能.将 (键:值/n 键/值/n)类型文本转化为字典对象
    '''
    
    import pickle
    
    
    
    def process_filename(filename):
        '''
        去掉文件名后缀
    
        parameter:文件名
        return:去后缀后的文件名
        '''
    
        mh = filename.rfind('.')
        if mh > 0:
            filename = filename[:mh]
        else:
            filename = filename
        return filename
    
    
    def to_dir(filename):
        '''
        将类字典冒号分割文本转化为字典对象
    
        parameter:类字典冒号分割文件名
        return:字典对象
        '''
    
        data = {}
        file_from = open(filename)
        for line_from in file_from:
            if line_from[0] == ':':
                continue
            rec = line_from.split(':')
            rec[0] = rec[0].strip()
            rec[1] = rec[1].strip()
            data[rec[0]] = rec[1]
        return data
        
    def to_data(filename):
        '''
        将类字典冒号分割文本转化为请求头对象
    
        parameter:类字典冒号分割文件名
        return:请求头对象
        '''
    
        data = {}
        file_from = open(filename)
        for line_from in file_from:
            if line_from[0] == ':':
                continue
            rec = line_from.split(':')
            rec[0] = rec[0].strip()
            rec[1] = rec[1].strip()
            data[rec[0]] = rec[1]
        import urllib.parse
        data = bytes(urllib.parse.urlencode(data), encoding='utf-8')
        return data
    
    
    def to_file(filename, to_obj=to_data):
        '''
        将类字典冒号分割文本格式化为同名的,以.pkl为后缀的对象文件
    
        parameter:类字典冒号分割文件名(str),
                  对象转化函数,默认为字典转化函数(function)
        '''
    
        obj = to_obj(filename)
        filename = process_filename(filename)
        data_file = open(filename + '.pkl', 'wb')
        pickle.dump(obj, data_file)
        data_file.close()
    
    
    def load_obj(filename):
        '''
        将对象从对象文件中取出
    
        parameter:文件名
        return:对象
        '''
        data_file = open(filename+'.pkl', 'rb')
        data = pickle.load(data_file)
        data_file.close()
        return data
    
    if __name__ == '__main__':
        import sys
        filename = sys.argv[1]
        data1 = to_dir(filename)
        print('data1:', data1)
        to_file(filename)
        data2 = load_obj(filename)
        print('data2:', data2)
    
  • 相关阅读:
    linux
    day01-02
    测试基础
    cookie session
    多表表与表关系 增删改查 admin
    连接数据库 创建表 字段和参数 增删改查
    LeetCode OJ:Triangle(三角形)
    LeetCode OJ:Unique Paths II(唯一路径II)
    LeetCode OJ:Unique Paths(唯一路径)
    使用双栈实现一个队列
  • 原文地址:https://www.cnblogs.com/Wang-Y/p/9346318.html
Copyright © 2011-2022 走看看