欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python解析Android項目中的strings.xml

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

python 解析 Android 項目里的 strings.xml

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

import xml.etree.ElementTree as ET

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

# 提取所有 <string> 標簽的 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

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

Python將android strings.xml導出到excel

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

用法

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

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

#Android國際化: 將xml文件中對應的字符串解析到excel中

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

    result = []#所有的文件
    filter=[subfix] #設置過濾后的文件類型 當然可以設置多個類型

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

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

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

    return result

#新建一個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)計
    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實現(xiàn)Android國際化多語言strings.xml文件與excel互轉

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

完整代碼

#可實現(xiàn)string.xml中資源匯總到excel文件,需自行創(chuàng)建in文件夾,并把string.xml文件全部放入,生成excel在out文件夾
#也可通過excel統(tǒ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("請輸入Excel文件(.xlsx)路徑: ")
    # path = "D:/code/py_stringxml/tets.xlsx"
    
    # 打開Excel文件  
    workbook = openpyxl.load_workbook(path)  
  
    # 獲取工作表對象  
    worksheet = workbook.active  
    # 檢查/創(chuàng)建輸出路徑  
    check_out_put()
    
    # 遍歷列數(shù)據(jù),不包含最大數(shù)  
    for col in range(2, worksheet.max_column+1):
        # 取excel當前列第一行作為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)  
        # 添加換行和縮進
        ET.indent(tree, space='\t', level=0)
        tree.write(filename, xml_declaration=True, encoding="utf-8")
        
    # 關閉Excel文件  
    workbook.close()
    
    print("處理完成")
  
def xml_2_excel():  
    # 檢查/創(chuàng)建輸出路徑  
    check_out_put()
    # 刪除上次生成的excel文件
    if os.path.isfile(outExcelName):
        os.remove(outExcelName)
    
    # 創(chuàng)建一個新的工作簿對象  
    workbook = openpyxl.Workbook()  
    # 選擇活動工作表  
    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()
        
        #設置單元格屬性(自動換行,頂端對齊)
        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:
                # 找出當前元素所在行
                # 數(shù)組下標從零開始,excel文件下標從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  
                # 設置單元格屬性
                m_cell.alignment = cell_style    
            
            value = child.text
            
            # 將翻譯的文本內(nèi)容寫入對應excel單元格  
            if not key is None:
                # print("current", col, row)
                m_cell = worksheet.cell(row=row, column=col) 
                m_cell.value = value  
                # 設置單元格屬性
                m_cell.alignment = cell_style
            else:
                print("key is None:", col, row)
            # 寫入下一行
            row=row+1
        # 下一個文件從下一列開始
        col=col+1
    
    for i in range(1, col):  
        #因為列名是字母需要將數(shù)字轉換成字母
        c = openpyxl.utils.get_column_letter(i) 
        #設置單元格寬度
        worksheet.column_dimensions[c].width = 40 
    
    # 保存Excel文件        
    workbook.save(outExcelName)
    
    print("處理完成")
        
if __name__ == "__main__":  
    select = input("請輸入操作選項:\n1、excel文件轉換成string.xml\n2、string.xml轉換成excel文件\n")
    if select == "1":
        excel_2_xml()  
    else:
        xml_2_excel()
    input("按任意鍵退出...")

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

相關文章

  • 用Python編寫一個國際象棋AI程序

    用Python編寫一個國際象棋AI程序

    在這篇文章中我會介紹這個AI如何工作,每一個部分做什么,它為什么能那樣工作起來。你可以直接通讀本文,或者去下載代碼,邊讀邊看代碼。雖然去看看其他文件中有什么AI依賴的類也可能有幫助,但是AI部分全都在AI.py文件中
    2014-11-11
  • 利用Matplotlib繪制折線圖、散點圖、柱狀圖、直方圖、餅圖的實例

    利用Matplotlib繪制折線圖、散點圖、柱狀圖、直方圖、餅圖的實例

    這篇文章主要介紹了利用Matplotlib繪制折線圖、散點圖、柱狀圖、直方圖、餅圖的實例代碼,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python中單引號、雙引號和三引號具體的用法及注意點

    Python中單引號、雙引號和三引號具體的用法及注意點

    這篇文章主要給大家介紹了關于Python中單引號、雙引號和三引號具體的用法及注意點的相關資料,Python中單引號、雙引號、三引號中使用常常困惑,想弄明白這三者相同點和不同點,需要的朋友可以參考下
    2023-07-07
  • python數(shù)組轉換為矩陣的方法實現(xiàn)

    python數(shù)組轉換為矩陣的方法實現(xiàn)

    本文主要介紹了python數(shù)組轉換為矩陣的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • Python面向對象之類和對象

    Python面向對象之類和對象

    這篇文章主要為大家介紹了Python類和對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • python多線程掃描端口(線程池)

    python多線程掃描端口(線程池)

    這篇文章主要為大家詳細介紹了python多線程掃描端口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • 兩個很實用的Python裝飾器詳解

    兩個很實用的Python裝飾器詳解

    這篇文章主要為大家介紹了Python的裝飾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助,希望能夠給你帶來幫助
    2021-11-11
  • 聊聊.py和.ipynb的一些小知識

    聊聊.py和.ipynb的一些小知識

    這篇文章主要介紹了聊聊.py和.ipynb的一些小知識,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 節(jié)日快樂! Python畫一棵圣誕樹送給你

    節(jié)日快樂! Python畫一棵圣誕樹送給你

    節(jié)日快樂!這篇文章主要介紹了如何使用Python畫一棵圣誕樹,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • python淺拷貝與深拷貝使用方法詳解

    python淺拷貝與深拷貝使用方法詳解

    淺拷貝,指的是重新分配一塊內(nèi)存,創(chuàng)建一個新的對象,但里面的元素是原對象中各個子對象的引用。深拷貝,是指重新分配一塊內(nèi)存,創(chuàng)建一個新的對象,并且將原對象中的元素,以遞歸的方式,通過創(chuàng)建新的子對象拷貝到新對象中。因此,新對象和原對象沒有任何關聯(lián)
    2022-11-11

最新評論