最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python解析Android項(xiàng)目中的strings.xml

 更新時(shí)間:2025年07月25日 08:49:30   作者:IT樂(lè)手  
這篇文章主要為大家詳細(xì)介紹了如何使用Python解析Android項(xiàng)目中的strings.xml,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

python 解析 Android 項(xiàng)目里的 strings.xml

針對(duì)大家在 Android 項(xiàng)目中可能用到的多國(guó)語(yǔ)言翻譯,需要把 value 里的內(nèi)容解析出來(lái),方便做編輯,可以使用以下 python 腳本輕松實(shí)現(xiàn)

import xml.etree.ElementTree as ET

# 解析 strings.xml 文件
xml_file = 'strings.xml'
tree = ET.parse(xml_file)
root = tree.getroot()

# 提取所有 <string> 標(biāo)簽的 name 和內(nèi)容
strings_dict = {}
for string_elem in root.findall('string'):
    name = string_elem.get('name')
    value = string_elem.text
    strings_dict[name] = value

# 輸出結(jié)果
for k, v in strings_dict.items():
    print(f'{k}: {v}')
    # print(f'{v}')

Python將android strings.xml導(dǎo)出到excel

做Android開發(fā)的時(shí)候要做國(guó)際化,需要將Android工程中的字符串資源導(dǎo)出到excel,讓專業(yè)團(tuán)隊(duì)翻譯。由于項(xiàng)目比較多,手動(dòng)復(fù)制不現(xiàn)實(shí),故使用python 將xml文件中對(duì)應(yīng)的字符串解析到excel中。

用法

復(fù)制以下代碼到python文件中,如string2excel.py, 添加可執(zhí)行權(quán)限(mac 電腦 chmod +x string2excel.py),將所有要導(dǎo)出的strings.xml復(fù)制到string2excel.py同一目錄下,執(zhí)行./string2excel.py 就會(huì)在同級(jí)目錄下生成excel文件。

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#Android國(guó)際化: 將xml文件中對(duì)應(yīng)的字符串解析到excel中

import xml.dom.minidom
from xlwt import Workbook
import os
def all_path(dirname,subfix):

    result = []#所有的文件
    filter=[subfix] #設(shè)置過(guò)濾后的文件類型 當(dāng)然可以設(shè)置多個(gè)類型

    for maindir, subdir, file_name_list in os.walk(dirname):

        # print("1:",maindir) #當(dāng)前主目錄
        # print("2:",subdir) #當(dāng)前主目錄下的所有目錄
        # print("3:",file_name_list)  #當(dāng)前主目錄下的所有文件

        for filename in file_name_list:
            apath = os.path.join(maindir, filename)#合并成一個(gè)完整路徑
            ext = os.path.splitext(apath)[1]  # 獲取文件后綴 [0]獲取的是除了文件名以外的內(nèi)容
            if ext in filter:
               result.append(apath)

    return result

#新建一個(gè)workbook
book = Workbook(encoding='utf-8')
#生成的excel表名稱
excel_file_name = 'Android_strings.xls'
#要處理的文件所在路徑及文件后綴
all_file=all_path("./",".xml")

#打印所有要輸出的文件的路徑及名稱
print(all_file)

sheet_info = []

class SheetInfo:
    sheet_name=''
    elementCount = 0
    def __init__(self, name, count):
        self.sheet_name = name
        self.elementCount = count


for file in all_file:

    filename= os.path.splitext(os.path.basename(file))[0]

    sheet = book.add_sheet(filename)

    #打開xml
    xmldoc = xml.dom.minidom.parse(file)
    code = xmldoc.getElementsByTagName('string')

    #表頭
    row = 0
    sheet.write(row, 0, 'Key')
    sheet.write(row, 1, 'EN')
    row = row+1

    #讀取每一行寫到excel中
    for node in code:
        for item in node.childNodes:
            sheet.write(row, 0, node.getAttribute('name'))
            sheet.write(row, 1, item.data)

        row = row+1

    #記錄表名和行數(shù),用于統(tǒng)計(jì)
    sheet_info.append(SheetInfo(filename,row-1))
#保存workbook
book.save(excel_file_name)

#增加匯總表
sheet = book.add_sheet('匯總')
row= 1
for element in sheet_info:
    sheet.write(row, 0, element.sheet_name)
    sheet.write(row, 1, element.elementCount)
    row = row+1
#保存workbook
book.save(excel_file_name)

python實(shí)現(xiàn)Android國(guó)際化多語(yǔ)言strings.xml文件與excel互轉(zhuǎn)

下面將通過(guò)Python腳本實(shí)現(xiàn)strings.xml文件中的多語(yǔ)言文本轉(zhuǎn)換到Excel表格,同時(shí)提供了兩種轉(zhuǎn)換功能:strings.xml轉(zhuǎn)Excel和Excel轉(zhuǎn)strings.xml

完整代碼

#可實(shí)現(xiàn)string.xml中資源匯總到excel文件,需自行創(chuàng)建in文件夾,并把string.xml文件全部放入,生成excel在out文件夾
#也可通過(guò)excel統(tǒng)計(jì)的資源生成對(duì)應(yīng)string.xml,放至out文件夾

import openpyxl  
import os  
import xml.etree.ElementTree as ET

outPath="out"
outExcelName=os.path.join(outPath, '翻譯文本.xlsx')
inPath="in"

def check_suffix(filePath):
    return os.path.splitext(filePath)[1]=='.xml'
    
def check_out_put():
    # 檢查文件夾是否存在  
    if not os.path.exists(outPath):  
        # 如果文件夾不存在,則創(chuàng)建文件夾  
        os.makedirs(outPath)

def excel_2_xml():  
    path = input("請(qǐng)輸入Excel文件(.xlsx)路徑: ")
    # path = "D:/code/py_stringxml/tets.xlsx"
    
    # 打開Excel文件  
    workbook = openpyxl.load_workbook(path)  
  
    # 獲取工作表對(duì)象  
    worksheet = workbook.active  
    # 檢查/創(chuàng)建輸出路徑  
    check_out_put()
    
    # 遍歷列數(shù)據(jù),不包含最大數(shù)  
    for col in range(2, worksheet.max_column+1):
        # 取excel當(dāng)前列第一行作為strings.xml的文件名
        filename = os.path.join(outPath, worksheet.cell(row=1, column=col).value)
        print("file name:", filename) 
        
        # 創(chuàng)建根元素
        root = ET.Element("resources")  
        
        for rows in range(2, worksheet.max_row+1):
            #每一行第一列為name
            key = worksheet.cell(rows, 1).value
            value = worksheet.cell(rows, col).value
  
            # 創(chuàng)建子元素  
            if not value is None:
                item = ET.SubElement(root, "string", name=key)  
                item.text = value  
        
        # 將XML寫入文件  
        tree = ET.ElementTree(root)  
        # 添加換行和縮進(jìn)
        ET.indent(tree, space='\t', level=0)
        tree.write(filename, xml_declaration=True, encoding="utf-8")
        
    # 關(guān)閉Excel文件  
    workbook.close()
    
    print("處理完成")
  
def xml_2_excel():  
    # 檢查/創(chuàng)建輸出路徑  
    check_out_put()
    # 刪除上次生成的excel文件
    if os.path.isfile(outExcelName):
        os.remove(outExcelName)
    
    # 創(chuàng)建一個(gè)新的工作簿對(duì)象  
    workbook = openpyxl.Workbook()  
    # 選擇活動(dòng)工作表  
    worksheet = workbook.active 
    
    stringNames=[]
    # 第一列存放string.xml中的name,翻譯文件從第二列開始
    col=2
    # 遍歷輸入路徑夾中所有xml文件
    for file in os.listdir(inPath):
        # 非xml后綴名不做處理
        if check_suffix(file) is False:
            continue
        print("file", file)
        
        row=1
        # 解析 XML 文件  
        tree = ET.parse(os.path.join(inPath, file))  
        # 獲取根元素  
        root = tree.getroot()
        
        #設(shè)置單元格屬性(自動(dòng)換行,頂端對(duì)齊)
        cell_style = openpyxl.styles.Alignment(vertical='top', wrap_text=True)   
        #excel文件名添加到第一行
        worksheet.cell(row=row, column=col, value=file)
        # 從第二行開始寫入value值
        row=row+1
        # 遍歷所有子元素  
        for child in root.iter():  
            key = child.get('name')
            if key is None:
                continue
            # 判斷元素是否已經(jīng)添加到excel文件,將xml的name添加到第一列
            if key in stringNames:
                # 找出當(dāng)前元素所在行
                # 數(shù)組下標(biāo)從零開始,excel文件下標(biāo)從1開始,得加1,第一行是文件名,再加1
                row = stringNames.index(key)+2
                
            else:
                # 元素名添加到數(shù)組
                stringNames.append(key)
                # 添加到最后一行,第一行是文件名,得加1
                row = len(stringNames)+1
                m_cell = worksheet.cell(row=row, column=1) 
                m_cell.value = key  
                # 設(shè)置單元格屬性
                m_cell.alignment = cell_style    
            
            value = child.text
            
            # 將翻譯的文本內(nèi)容寫入對(duì)應(yīng)excel單元格  
            if not key is None:
                # print("current", col, row)
                m_cell = worksheet.cell(row=row, column=col) 
                m_cell.value = value  
                # 設(shè)置單元格屬性
                m_cell.alignment = cell_style
            else:
                print("key is None:", col, row)
            # 寫入下一行
            row=row+1
        # 下一個(gè)文件從下一列開始
        col=col+1
    
    for i in range(1, col):  
        #因?yàn)榱忻亲帜感枰獙?shù)字轉(zhuǎn)換成字母
        c = openpyxl.utils.get_column_letter(i) 
        #設(shè)置單元格寬度
        worksheet.column_dimensions[c].width = 40 
    
    # 保存Excel文件        
    workbook.save(outExcelName)
    
    print("處理完成")
        
if __name__ == "__main__":  
    select = input("請(qǐng)輸入操作選項(xiàng):\n1、excel文件轉(zhuǎn)換成string.xml\n2、string.xml轉(zhuǎn)換成excel文件\n")
    if select == "1":
        excel_2_xml()  
    else:
        xml_2_excel()
    input("按任意鍵退出...")

到此這篇關(guān)于Python解析Android項(xiàng)目中的strings.xml的文章就介紹到這了,更多相關(guān)Python解析Android中xml內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解

    Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解

    今天小編就為大家分享一篇Pytorch在NLP中的簡(jiǎn)單應(yīng)用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python?asyncore?socket客戶端開發(fā)基本使用教程

    Python?asyncore?socket客戶端開發(fā)基本使用教程

    asyncore庫(kù)是python的一個(gè)標(biāo)準(zhǔn)庫(kù),提供了以異步的方式寫入套接字服務(wù)的客戶端和服務(wù)器的基礎(chǔ)結(jié)構(gòu),這篇文章主要介紹了Python?asyncore?socket客戶端開發(fā)基本使用,需要的朋友可以參考下
    2022-12-12
  • python下載文件時(shí)顯示下載進(jìn)度的方法

    python下載文件時(shí)顯示下載進(jìn)度的方法

    這篇文章主要介紹了python下載文件時(shí)顯示下載進(jìn)度的方法,涉及Python文件操作的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-04-04
  • Python中的xlrd模塊使用整理

    Python中的xlrd模塊使用整理

    今天給大家?guī)?lái)的文章是關(guān)于Python的相關(guān)知識(shí),文章圍繞著xlrd模塊的使用展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Python 中 -m 的典型用法、原理解析與發(fā)展演變

    Python 中 -m 的典型用法、原理解析與發(fā)展演變

    這篇文章主要介紹了Python 中 -m 的典型用法、原理解析與發(fā)展演變,需要的朋友可以參考下
    2019-11-11
  • 3分鐘看懂Python后端必須知道的Django的信號(hào)機(jī)制

    3分鐘看懂Python后端必須知道的Django的信號(hào)機(jī)制

    這篇文章主要介紹了3分鐘看懂Python后端必須知道的Django的信號(hào)機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Python基于numpy靈活定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法

    Python基于numpy靈活定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法

    這篇文章主要介紹了Python基于numpy靈活定義神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的方法,結(jié)合實(shí)例形式分析了神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)的原理及Python具體實(shí)現(xiàn)方法,涉及Python使用numpy擴(kuò)展進(jìn)行數(shù)學(xué)運(yùn)算的相關(guān)操作技巧,需要的朋友可以參考下
    2017-08-08
  • Python3實(shí)現(xiàn)二叉樹的最大深度

    Python3實(shí)現(xiàn)二叉樹的最大深度

    這篇文章主要介紹了Python3實(shí)現(xiàn)二叉樹的最大深度, 文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 解讀keras中的正則化(regularization)問(wèn)題

    解讀keras中的正則化(regularization)問(wèn)題

    這篇文章主要介紹了解讀keras中的正則化(regularization)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python代碼實(shí)現(xiàn)在PowerPoint中添加并控制音頻播放

    Python代碼實(shí)現(xiàn)在PowerPoint中添加并控制音頻播放

    本文將介紹如何使用 Spire.Presentation for Python 在 PowerPoint 演示文稿中插入音頻文件,控制音頻播放行為以及管理音頻屬性,感興趣的小伙伴可以了解下
    2026-05-05

最新評(píng)論

嫩江县| 石屏县| 靖远县| 肇庆市| 申扎县| 亳州市| 日喀则市| 黄龙县| 灵川县| 临沭县| 尼勒克县| 门头沟区| 满城县| 年辖:市辖区| 高青县| 珲春市| 岑巩县| 叙永县| 霞浦县| 长宁县| 壶关县| 莱芜市| 错那县| 皮山县| 莫力| 饶河县| 沂源县| 高邮市| 桓台县| 海门市| 合阳县| 石棉县| 宜州市| 昌宁县| 沐川县| 枣强县| 新沂市| 南充市| 时尚| 偃师市| 增城市|