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

odoo 导入文件xml制作,使用csv 文件制作xml 文件

时间:2020-07-15 23:52:04      阅读:67      评论:0      收藏:0      [点我收藏+]

标签:rand   str   生成   with open   enumerate   range   文件   方式   new   

import csv
import random


class XmlFormat(object):
    def __init__(self):
        self.wf = open(‘data/res_location.xml‘, ‘w‘, encoding=‘utf-8‘)
        self.add_header()

    def add_header(self):
        header = """<?xml version="1.0" encoding="utf-8"?>
<odoo>
    <data noupdate="1">
                """
        # print(header)
        self.wf.write(header)

    def add_tail(self):
        tail = """
        </data>
        </odoo>
                """
        self.wf.write(tail)

    def get_random(self):
        return random.randrange(1000, 9999, 1)

    def readfile(self):
        with open(‘data/location.csv‘, ‘r‘, encoding=‘utf-8‘) as f:
            reder = csv.reader(f, delimiter=‘,‘)
            for i, line in enumerate(reder):
                if not line:
                    continue
                # todo: 自动抓取表头信息,并设置键值对:
                if i == 0:
                    # 存储表头字段
                    if not line:
                        raise
                    header_line = line
                    continue
                data = {}
                # print(line)
                # 处理每一行的数据
                for e, var in enumerate(line):
                    # print(e,var,header_line[e])
                    if header_line[e] == ‘new-code‘:
                        data[header_line[e]] = var or self.get_random()
                    elif header_line[e] == ‘is_warehouse‘:
                        data[header_line[e]] = var or 0
                    else:
                        data[header_line[e]] = var

                if (i) % 1000 == 0:
                    # 关闭之前的文件
                    self.add_tail()
                    self.wf.close()
                    self.wf = open(‘data/res_location.xml‘.format(i), ‘w‘, encoding=‘utf-8‘)
                    print(‘\‘data/res_location{}.xml\‘,‘.format(i))
                    self.add_header()
                #     这里传递参数的方式可以使用**kw
                self.generate_xml_code(**data)

    def generate_xml_code(self, **kwargs):
        """
        设置xml 模板,并生成相应的xml文本,
        大括号中的参数需要和csv 文件的字段信息保持一致,如{extra_id} 对应csv 文件中的extra_id字段
        xml 模板按照可按照自己的需求进行更换.
        注: csv 文件的字段不能重复.
        :param kwargs:
        :return:
        """
        str_format = """
        <record id="{extra_id}" model="stock.location">
            <field name="name">{name}</field>
            <field name="usage">internal</field>
            <field name="is_warehouse">{is_warehouse}</field>
            <field name="active">1</field>
            <field name="company_id" ref="base.main_company"/>
            <field name="location_id" ref="{extra_id_parent}"/>
            <field name="barcode">{new-code}</field>
        </record>
        """
        res = str_format.format(**kwargs)
        self.wf.write(res)

    def __del__(self):
        self.add_tail()

        self.wf.close()


if __name__ == ‘__main__‘:
    a = XmlFormat()
    a.readfile()

说明:

  1. csv文件需要放在data文件夹中,其实可以修改读取文件的位置

odoo 导入文件xml制作,使用csv 文件制作xml 文件

标签:rand   str   生成   with open   enumerate   range   文件   方式   new   

原文地址:https://www.cnblogs.com/qianxunman/p/13307604.html

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