码迷,mamicode.com
首页 > 其他好文 > 详细

格式化文件转对象

时间:2018-07-21 17:05:43      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:import   main   load   strip   扩展   fun   func   else   后缀   

格式化文件转对象

爬虫构造请求头时,需要用到字典,在浏览器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)

格式化文件转对象

标签:import   main   load   strip   扩展   fun   func   else   后缀   

原文地址:https://www.cnblogs.com/Wang-Y/p/9346318.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!