Python3 | excel 操作

读取 excel 并生成 json 文件

Posted by Haauleon on June 2, 2023

读取excel并生成json文件

项目结构:

1
2
3
4
5
6
7
- locales
  - en_US.json
  - pt_PT.json
  - zh_CN.json
  - zh_HK.json
- excel_to_json.py
- 多语言翻译.xlsx


项目资源:
链接:https://pan.baidu.com/s/1yNAREbRfHTOmOTjI-oSH9A?pwd=kbdc
提取码:kbdc



代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# -*- coding: utf-8 -*-#
"""
@Author  :   haauleon
@Contact :   753494552@qq.com
@File    :   excel_to_json.py
@Date    :   2022/7/13 4:30 PM
@Function:   读取excel并生成json文件

@Modify Time            @Author      @Version      @Description
-------------------   ----------    ----------    -------------
2022/7/13 4:30 PM      haauleon         1.0        读取excel并生成json文件
"""
import json
import xlrd
import os

_SLASH = os.sep

# 上级目录路径
root_path = os.path.dirname(os.path.abspath(__file__))
# 翻译文档路径
excel_path = os.path.join(root_path, '多语言翻译.xlsx')
# 多语言json包路径
locales_path = os.path.join(root_path, 'locales' + _SLASH)


class SaveDate:
    """
    读取excel表的翻译数据并分别存于json文件
    """

    def __init__(self):
        self.locales_path = locales_path  # 多语言翻译目录路径
        self.excel_path = excel_path

    def save_to_cn(self, k, v):
        """简体"""
        file_path = self.locales_path + "zh_CN.json"
        with open(file_path, "r") as cn:
            cn_dict = json.load(cn)

        cn_dict[k] = v
        with open(file_path, "w", encoding='utf-8') as cn_f:
            # 做dump与dumps操作时,会默认将中文转换为unicode,但在做逆向操作load和loads时会转换为中文,但是中间态(例如存储的json文件)的中文编码方式仍然是unicode, 解决办法
            json.dump(cn_dict, cn_f, ensure_ascii=False)
        print("简体: ", k, " >>>>>>>>>>> 添加成功")

    def save_to_hk(self, k, v):
        """繁体"""
        file_path = self.locales_path + "zh_HK.json"
        with open(file_path, "r") as hk:
            hk_dict = json.load(hk)

        hk_dict[k] = v
        with open(file_path, "w", encoding='utf-8') as cn_f:
            # 做dump与dumps操作时,会默认将中文转换为unicode,但在做逆向操作load和loads时会转换为中文,但是中间态(例如存储的json文件)的中文编码方式仍然是unicode, 解决办法
            json.dump(hk_dict, cn_f, ensure_ascii=False)
        print("繁体: ", k, " >>>>>>>>>>> 添加成功")

    def save_to_pt(self, k, v):
        """葡语"""
        file_path = self.locales_path + "pt_PT.json"
        with open(file_path, "r") as pt:
            pt_dict = json.load(pt)

        pt_dict[k] = v
        with open(file_path, "w", encoding='utf-8') as cn_f:
            json.dump(pt_dict, cn_f,
                      ensure_ascii=False)
        print("葡语: ", k, " >>>>>>>>>>> 添加成功")

    def save_to_en(self, k, v):
        """英语"""
        file_path = self.locales_path + "en_US.json"
        with open(file_path, "r") as us:
            us_dict = json.load(us)

        us_dict[k] = v
        with open(file_path, "w", encoding='utf-8') as cn_f:
            json.dump(us_dict, cn_f,
                      ensure_ascii=False)
        print("英语: ", k, " >>>>>>>>>>> 添加成功")

    def run_to_save_json(self):
        """将多语言翻译的excel文件的值追加到json文件中"""
        xl = xlrd.open_workbook(self.excel_path)
        table = xl.sheets()[0]
        for row in range(1, table.nrows):
            cn = table.cell(row, 0).value  # 值
            cht = table.cell(row, 1).value  # 键
            pt = table.cell(row, 2).value
            en = table.cell(row, 3).value
            self.save_to_cn(cn, cn)
            self.save_to_hk(cn, cht)
            self.save_to_pt(cn, pt)
            self.save_to_en(cn, en)


if __name__ == '__main__':
    # 执行生成json文件
    sd = SaveDate()
    sd.run_to_save_json()