批量修改xml文件中指定位置内容

冷不防 2023-01-23 03:52 196阅读 0赞

批量修改xml文件中指定位置内容
我要修改图片的绝对路径
在这里插入图片描述
在这里插入图片描述

  1. #!/usr/bin/python
  2. ''' 此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。 '''
  3. import os #文件操作相关
  4. import xml.etree.ElementTree as ET #xml文件操作相关
  5. """ "******************************************************************************************* *函数功能 *输入参数 :输入裁剪后图像, *返 :无 *编写时间 2021.7.12 *作 diyun ********************************************************************************************"""
  6. # 批量修改整个文件夹所有的xml文件
  7. def change_all_xml(xmlfilepath,string1):
  8. total_xml = os.listdir(xmlfilepath) # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
  9. num = len(total_xml) # xml文件个数
  10. print(num)
  11. print(total_xml[0])
  12. for xmlfile in total_xml:
  13. #print(xml_id)
  14. in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
  15. #print(in_file)
  16. tree = ET.parse(in_file)
  17. #print(tree)
  18. root = tree.getroot()
  19. #print(root)
  20. obj = root.find('path') # 找到filename标签,
  21. #print(obj)
  22. path_text = obj.text
  23. #print(path_text)
  24. end = "\\"
  25. string2 = path_text[path_text.rfind(end):] # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
  26. #print(string2)
  27. path_text_1=string1+string2
  28. #print("path_text_1:",path_text_1)
  29. obj.text = path_text_1 # 修改标签内容
  30. tree.write('%s/%s' % (xmlfilepath, xmlfile)) # 保存修改
  31. xmlfilepath = 'helmet_xml' # xml文件保存地址
  32. # 要修改的内容
  33. string1='E:\\1_Training_picture\\6_helmet\\helmet_train'
  34. change_all_xml(xmlfilepath,string1)
  35. print("ok")

2、修改path和filename

  1. #!/usr/bin/python
  2. ''' 此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。 '''
  3. import os #文件操作相关
  4. import xml.etree.ElementTree as ET #xml文件操作相关
  5. """ "******************************************************************************************* *函数功能 *输入参数 :输入裁剪后图像, *返 :无 *编写时间 2021.7.12 *作 diyun ********************************************************************************************"""
  6. # 批量修改整个文件夹所有的xml文件
  7. def change_all_xml(xmlfilepath,string1):
  8. total_xml = os.listdir(xmlfilepath) # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
  9. num = len(total_xml) # xml文件个数
  10. print(num)
  11. print(total_xml[0])
  12. for xmlfile in total_xml:
  13. #print("**********************************************************************************************************")
  14. #print(xmlfile)
  15. in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
  16. #print(in_file)
  17. tree = ET.parse(in_file)
  18. #print(tree)
  19. root = tree.getroot()
  20. #print(root)
  21. obj = root.find('path') # 找到filename标签,
  22. #print(obj)
  23. path_text = obj.text
  24. #print(path_text)
  25. #end = "."
  26. end = "."
  27. string3 = path_text[path_text.rfind(end):] # 在strint1中查找最后一个反斜杠\后面的字符,图片名称
  28. #print("string3:", string3)
  29. end = "."
  30. #string4 = string3[string3.rfind(end):] # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
  31. #print("string4:", string4)
  32. #print("xmlfile:", xmlfile)
  33. #print("string1:", string1)
  34. end = "."
  35. string2 = xmlfile[:xmlfile.rfind(end)] # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
  36. #print("string2:", string2)
  37. path_text_1 = string1 + string2+string3
  38. #print("path_text_1:",path_text_1)
  39. obj.text = path_text_1 # 修改标签内容
  40. #tree.write('%s/%s' % (xmlfilepath, xmlfile)) # 保存修改
  41. obj_2 = root.find('filename') # 找到filename标签
  42. #print("obj_2:", obj_2)
  43. path_text_2= string2+string3
  44. #print("path_text_2:", path_text_2)
  45. obj_2.text = path_text_2 # 修改标签内容
  46. tree.write('%s/%s' % (xmlfilepath, xmlfile)) # 保存修改
  47. #xmlfilepath = 'temp' # xml文件保存地址
  48. xmlfilepath = 'helmet_xml' # xml文件保存地址
  49. # 要修改的内容
  50. string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'
  51. change_all_xml(xmlfilepath,string1)
  52. print("ok")

最终版本

  1. #!/usr/bin/python
  2. ''' 此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。 '''
  3. import os #文件操作相关
  4. import xml.etree.ElementTree as ET #xml文件操作相关
  5. import cv2
  6. #PRINT_FLAG=True
  7. PRINT_FLAG=False
  8. """ "******************************************************************************************* *函数功能 *输入参数 :输入裁剪后图像, *返 :无 *编写时间 2021.7.12 *作 diyun ********************************************************************************************"""
  9. # 批量修改整个文件夹所有的xml文件
  10. def change_all_xml(xmlfilepath,string1):
  11. total_xml = os.listdir(xmlfilepath) # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。
  12. num = len(total_xml) # xml文件个数
  13. print(num)
  14. print(total_xml[0])
  15. for xmlfile in total_xml:
  16. #print("**********************************************************************************************************")
  17. #print(xmlfile)
  18. in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
  19. #print(in_file)
  20. tree = ET.parse(in_file)
  21. #print(tree)
  22. root = tree.getroot()
  23. #print(root)
  24. obj = root.find('path') # 找到filename标签,
  25. #print(obj)
  26. path_text = obj.text
  27. #print(path_text)
  28. #end = "."
  29. end = "."
  30. string3 = path_text[path_text.rfind(end):] # 在strint1中查找最后一个反斜杠\后面的字符,图片名称
  31. #print("string3:", string3)
  32. end = "."
  33. #string4 = string3[string3.rfind(end):] # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
  34. #print("string4:", string4)
  35. #print("xmlfile:", xmlfile)
  36. #print("string1:", string1)
  37. end = "."
  38. string2 = xmlfile[:xmlfile.rfind(end)] # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
  39. #print("string2:", string2)
  40. path_text_1 = string1 + string2+string3
  41. try:
  42. #print("path_text_1:", path_text_1)
  43. image = cv2.imread(path_text_1,1)
  44. image.shape
  45. #cv2.imshow("aa",image)
  46. #cv2.waitKey(2000)
  47. #print('Open image ok! ')
  48. except:
  49. print('1111:Open image Error! Try again!')
  50. print("path_text_1:", path_text_1)
  51. string3='.jpg'
  52. path_text_1 = string1 + string2 + string3
  53. print("path_text_1:", path_text_1)
  54. try:
  55. #print("path_text_1:", path_text_1)
  56. image = cv2.imread(path_text_1, 1)
  57. image.shape
  58. #cv2.imshow("aa",image)
  59. #cv2.waitKey(2000)
  60. print('Open image ok! ')
  61. print('*****************************************************************************')
  62. except:
  63. print('222 : Open image Error! Try again!')
  64. string3=".jpg"
  65. path_text_1 = string1 + string2 + string3
  66. print("path_text_1:", path_text_1)
  67. #print("path_text_1:",path_text_1)
  68. obj.text = path_text_1 # 修改标签内容
  69. #tree.write('%s/%s' % (xmlfilepath, xmlfile)) # 保存修改
  70. obj_2 = root.find('filename') # 找到filename标签
  71. #
  72. path_text_2= string2+string3
  73. #
  74. obj_2.text = path_text_2 # 修改标签内容
  75. if PRINT_FLAG==True:
  76. print("string1:", string1)
  77. print("string2:", string2)
  78. print("string3:", string3)
  79. print("path_text_1:", path_text_1)
  80. print("obj_2:", obj_2)
  81. print("path_text_2:", path_text_2)
  82. tree.write('%s/%s' % (xmlfilepath, xmlfile)) # 保存修改
  83. #xmlfilepath = 'temp' # xml文件保存地址
  84. xmlfilepath = 'helmet_xml' # xml文件保存地址
  85. # 要修改的内容
  86. string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'
  87. change_all_xml(xmlfilepath,string1)
  88. print("ok")

发表评论

表情:
评论列表 (有 0 条评论,196人围观)

还没有评论,来说两句吧...

相关阅读