odoo 匯入檔案xml製作,使用csv 檔案製作xml 檔案
阿新 • • 發佈:2020-07-15
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()
說明:
- csv檔案需要放在data資料夾中,其實可以修改讀取檔案的位置