zoukankan      html  css  js  c++  java
  • python数据处理----常用数据文件的处理

    数据处理时,常用数据存储形式主要有:CSV、JSON、XML、EXCEL、数据库存储。

    一、CSV文件

    • csv文件简介

    CSV是一种通用的、相对简单的文件格式,被用户、商业和科学广泛应用。最广泛的应用是在程序之间转移表格数据,而这些程序本身是在不兼容的格式上进行操作的(往往是私有的和/或无规范的格式)。因为大量程序都支持某种CSV变体,至少是作为一种可选择的输入/输出格式。

    CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或者制表符。

    • csv文件样式

    John,Doe,120 jefferson st.,Riverside, NJ, 08075
    Jack,McGinnis,220 hobo Av.,Phila, PA,09119

    • python处理
    import csv
    if __name__=='__main__':
        csvfile=open('E:\pythonwork\data\iris.csv','r')
        #reader = csv.reader(csvfile)
        reader = csv.DictReader(csvfile)
        for row in reader:
            print(row)

    二、JSON文件

    • json文件简介

    JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

    • json文件样式

    {"application_instance_id":102061,"application_node":"10.45.44.44","billing_info":[{"application_batch_nums":1.0,"cdr_nums":2,"charge":46.0,"event_format_id":999,"exec_time_consume":120087,"lan_id":743,"serv_nums":2,"service_id":3,"src_net_data_id":123,"stat_batch_id":102061101001,"stat_cdr_type":10},{"application_batch_nums":0.0,"cdr_nums":2,"charge":0.0,"event_format_id":42,"exec_time_consume":0,"lan_id":743,"serv_nums":0,"service_id":3,"src_net_data_id":123,"stat_batch_id":102061101001,"stat_cdr_type":20},{"application_batch_nums":0.0,"cdr_nums":2,"charge":0.0,"event_format_id":41,"exec_time_consume":0,"lan_id":743,"serv_nums":0,"service_id":3,"src_net_data_id":123,"stat_batch_id":102061101001,"stat_cdr_type":20},{"application_batch_nums":0.0,"cdr_nums":2,"charge":0.0,"event_format_id":34,"exec_time_consume":0,"lan_id":743,"serv_nums":0,"service_id":3,"src_net_data_id":123,"stat_batch_id":102061101001,"stat_cdr_type":20}],"exec_end_time":"20180830174554","exec_start_time":"20180830174554"}

    • python读取json文件
    import json
    if __name__ == '__main__':
        json_data = open('E:\pythonwork\data\test.json', 'r').read()
        data = json.loads(json_data)
        print((data.values()))
        for row in data.values():
            print(row)

    三 、XML文件

    • xml文件介绍

    可扩展标记语言(XML)与Access,Oracle和SQL Server等数据库不同,数据库提供了更强有力的数据存储和分析能力,例如:数据索引、排序、查找、相关一致性等,XML的宗旨传输数据的,而与其同属标准通用标记语言的HTML主要用于显示数据。事实上XML与其他数据表现形式最大的不同是:他极其简单。这是一个看上去有点琐细的优点,但正是这点使XML与众不同。
    XML的简单使其易于在任何应用程序中读写数据,这使XML很快成为数据交换的唯一公共语言,虽然不同的应用软件也支持其它的数据交换格式,但不久之后他们都将支持XML,那就意味着程序可以更容易的与Windows、Mac OS, Linux以及其他平台下产生的信息结合,然后可以很容易加载XML数据到程序中并分析他,并以XML格式输出结果。

    • xml文件样式

    •  xml文件处理
      • dom方式处理
    #通过dom的方式解析xml
    import xml.dom.minidom as xmldom
    import os
    from getbyxmltree import parse_xml_etree
    def get_node(node, nodename):
        return node.getElementsByTagName(nodename) if node else ''
    
    def get_nodevalue(node,index=0):
        return node.childNodes[index].nodeValue if node else ''
    
    def get_nodeattr(node,attrname):
        return node.getAttribute(attrname) if node else ''
    
    def parse_dom_xml(path):
        xmlfilepath=os.path.abspath(path)
        print(u'文件路径:',xmlfilepath)
        # 获得文档对象
        domobj = xmldom.parse(xmlfilepath)
        elemobj = domobj.documentElement
        print(elemobj)
        dsn_node = get_node(elemobj ,'DsnInfo')
        dsn_list=[]
        for node in dsn_node:
            node_name=get_node(node,'DsnName')
            node_ip1 = get_node(node,'IP1')
            node_port1=get_node(node,'Port1')
            node_ip2 = get_node(node, 'IP2')
            node_port2 = get_node(node, 'Port2')
            #获取VALUE
            dsn_name = get_nodevalue(node_name[0])
            dsn_ip1 = get_nodevalue(node_ip1[0])
            dsp_port1 = get_nodevalue(node_port1[0])
            dsn_ip2 = get_nodevalue(node_ip2[0])
            dsp_port2 = get_nodevalue(node_port2[0])
            dsn_info={}
            dsn_info['dsn_name'], dsn_info['ip1'], dsn_info['port1'], dsn_info['ip2'], dsn_info['port2'] = (
                dsn_name, dsn_ip1, dsp_port1, dsn_ip2, dsp_port2
            )
            dsn_list.append(dsn_info)
        return dsn_list
      • ctree方式
    try:
        import xml.etree.cElementTree as xmltree
    except:
        import xml.etree.ElementTree as xmltree
    import sys,os
    
    def transxml(node):
        if node:
            for child in node:
                if child.tag == 'IP1':
                    print('child tag:%s,value:%s' % (child.tag,child.text))
                transxml(child)
    
    def parse_xml_etree(path):
        xmlfilepath = os.path.abspath(path)
        print(u'文件路径:', xmlfilepath)
        tree = xmltree.parse(xmlfilepath)
        root = tree.getroot()
        print('root=',type(root))
        '''
        print(u"按照下标访问")
        print(tree.getroot()[0][1].tag)
        print(tree.getroot()[0][1].text)
        '''
        print(u"查找标签")
        ip_list= root[0].findall('DsnInfo')
        print(len(ip_list))
        for ip in ip_list:
            print(type(ip))
            print("tag:%s
    text:%s
    " % (ip.tag,ip.text))
        print(u"迭代")
        for node in root.iter('DsnInfo'):
            print(node.tag)
            print(type(node))
    
        #print(u"遍历")
        #transxml(tree.getroot())

     四、预告

    下次更新将主要介绍EXCEL方式处理。扫描二维码关注公众号

  • 相关阅读:
    【Lucene4.8教程之五】Luke
    【Tika基础教程之一】Tika基础教程
    【Lucene4.8教程之四】分析
    【Lucene4.8教程之六】QueryParser与Query子类:如何生成Query对象
    【Lucene4.8教程之三】搜索
    Java路径问题最终解决方案—可定位所有资源的相对路径寻址
    java.util.logging.Logger基础教程
    【Lucene4.8教程之二】索引
    【Lucene4.8教程之一】使用Lucene4.8进行索引及搜索的基本操作
    【Heritrix基础教程之4】开始一个爬虫抓取的全流程代码分析
  • 原文地址:https://www.cnblogs.com/newzol/p/9954340.html
Copyright © 2011-2022 走看看