1. 程式人生 > >python處理類xml檔案遇到的坑

python處理類xml檔案遇到的坑

首先先確定xml檔案有兩個特點容易忽視,
1、xml檔案有且只有一個根節點
2、xml檔案的標籤的屬性都有引號“”
這裡寫圖片描述
由於對xml檔案不熟,並且對python處理xml檔案不熟,故這兩個坑用了將近一天的時間來填,謹記

說到填坑,要特備感謝一駐馬店的老鄉“駐馬店bd”qq已備註。不是他的幫助,估計還要整好長時間。特此感謝,雖然他看不到。

那麼我處理的檔案到底什麼樣子呢,請看圖:
這裡寫圖片描述

就這這麼個德行,一缺少根節點(在檔案開頭結尾補上即可),二標籤的屬性缺少引號(使用正則表示式在id=x加上引號就行了id=”x”)。

(自強不息)

——————————————————————————————————————————————
2017.02.19記錄
記得有點亂哈。
這次總結下,我之所以要一直使之成為合法的xml檔案,是因為我要提取xml檔案裡面的屬性。可能轉的圈有點大。但是目前我也沒什麼好的辦法。先按著這個方法來唄。
要想成為一個合法的xml檔案,除了滿足上面的兩點,還有一點也要滿足

即屬性裡不能有特殊的字元(如<>、&、()等等不知道的字元)。有的話,就沒辦法當成一個xml檔案進行解析。所以要去掉這些字元。這裡我選擇使用正則表示式去匹配去除。

——————————————————————————————————————
以下是2017.02.20記錄
經歷過這近三天的經歷,我突然意識到也許作者在寫這個檔案時,就不是按照xml格式來寫的,導致按照xml檔案格式來處理千難萬難。這樣的判斷來自以下兩點:
1、加入是合法的xml檔案,那麼這個標籤的屬性裡面就不會包含尖括號<>等這樣的非法字元。
2、按照xml檔案來處理,這樣的非法字元很多。
綜上所述,這個檔案不能按照xml檔案來處理。

今天突然靈感一來,我決定直接提取我想要的標籤屬性:
程式碼是re+++.py

這個程式碼實現了從類xml檔案中(如上圖格式)提取出標籤屬性。
程式碼上傳至(待定)

# -*- coding: utf-8 -*-
#
# Copyright @2017 R&D, CINS Inc. (cins.com)
#
# Author: PengjunZhu <[email protected]>
#a5a
# Function:提取出原始檔案中的sunmary和short_text,將每一個human_label、summary和short_text分詞後寫在一行
# # time: 2017.02.20 # 提取 line中的xx # result0 = re.findall("XX",line) # 這裡的XX代表你要提取的某種格式的符號 # print result0[0] # 將提出出來的xx寫到螢幕上 # import re import jieba.posseg as pseg import jieba path1 = 'D:/LCSTS/DATA/PART_I.txt' path2 = 'D:/LCSTS/DATA1/PART_I_comb.txt' file1 = open(path1, 'r') file2 = open(path2, 'w') # file2.write('<ddoc>'+'\n') i = 0 print '程式開始' print '程式執行中...' for line in file1: if '</short_text>' in line: #一個文字換一行 # print 'true' file2.write('\n') if '<doc id=' in line: id = re.findall("\d+",line) # print '文字id是:',id[0] # file2.write(id[0]+"##") if '<human_label>' in line: score = re.findall("\d+",line) # print '人工打標籤的分值:',score[0] file2.write(score[0]+" ") regex = re.compile(u'[\u4e00-\u9fa5]') #匹配有中文字元的行 match = regex.search(line.decode('utf-8')) #match是一個布林值,1代表匹配到了。0代表沒有 if match: line1 = re.sub("<.*?>","",line) line1 = line1.strip() line2 = line1.decode('utf-8', 'ignore') #將獲取的字串line1做decode時,指明ignore,會忽略非法字元,這樣就可以了 words = jieba.cut(line2) # 分詞 line2 = " ".join(words).encode('utf-8') # print line2 i += 1 # words = pseg.cut(line1) # 分詞+詞性標註 # for word, flag in words: # print word +'/'+ flag file2.write(line2+" ") else: pass print i file1.close() # file2.write('</ddoc>'+'\n') file2.close() print '程式結束'

相關推薦

python處理xml檔案遇到的

首先先確定xml檔案有兩個特點容易忽視, 1、xml檔案有且只有一個根節點 2、xml檔案的標籤的屬性都有引號“” 由於對xml檔案不熟,並且對python處理xml檔案不熟,故這兩個坑用了將近一天的時間來填,謹記 說到填坑,要特備感謝一駐馬店的老

python快速製作xml檔案

用python快速製作xml檔案 Shawn python 3.7 因為工作需要, 要用到xml檔案,所以用python寫了個類,以實現快速製作xml檔案. from xml.dom.minidom import Document # import x

Python讀寫XML檔案

什麼是XML XML是可擴充套件標記語言(Extensible Markup Language)的縮寫,其中標記是關鍵部分。使用者可以建立內容,然後使用限定標記標記它,從而使每個單詞、短語或塊成為可識別、可分類的資訊。 標記語言從早起的私有公司和政府制定形式逐

Java用String 擷取方式解析xml檔案處理xml檔案

對於小資料返回值直接可採用Document、element的解析方式即可獲得xml節點值。 但對於返回值大於10M的資料,Document解析就顯得吃力甚至出現程式中斷情況。針對返回資料大的xml可採取Java String 分割擷取方式處理。 如下報文返回的是銀行資訊,程式需要獲得Ba

python處理mp3音訊檔案:搜尋靜音(空白)時間

最近在做英語單詞的lrc字幕檔案時,有個需求:需要找出mp3中的靜默起始時間,網上搜索了相關資料,搞了個python實現如下: from pydub import AudioSegment from pydub.silence import detect_silence i

處理pom.xml檔案首行錯誤的解決方法

第一:找到maven安裝目錄下repository對應的資料夾,把在提示資訊中出現的檔案全部刪除(也可以把同一層的檔案全部刪除,不放心的話可以先拷貝一份出來),然後返回專案,右鍵-->maven(也可能是Maven4MyEclipse)-->update Project,一般這樣就行了;

python->解析xml檔案

'''"D:\three_test\gpn_InternetGatewayDevice_v2.xml"<SOAP-ENV:Envelope> <SOAP-ENV:Header> <cwmp:ID SOAP-ENV:mustUnderstand="1">1<

python處理將csv檔案1內容修改後寫入到csv2檔案

我這裡的方法或許不是很好,主要做法是使用列表和字典進行轉換,感覺很繁瑣,但是也是一種方法。 如果有大神有更好的方法,請留言。 # -*- coding:utf-8 -*- #author:zgd import pandas import csv # with open("url_fea

python讀取檔案資料並計算矩形面積

1.建立一個類Rectangle,已知a、b求面積,求三角形的面積 2.結合題目一,從題目一檔案中讀取資料,並採用類的方法,將計算的結果寫在另一個文件中。 (1)利用類進行計算一個矩形的面積,已經a、b邊長。 class Rectangle: '''這是關於矩形面積的計算公式,只用給出矩

python處理gz壓縮檔案,解壓並轉化為json

import requests import gzip import json # gz檔案地址 url='https://shilupan-basic-user-pro.oss-cn-shangha

處理替換xml檔案指定內容

由於常常需要切換IP地址的配置檔案,多個檔案修改,其實最簡單的就是edittext++ 查詢替換 但是有的時候就是抽風,閒的蛋疼,想編寫一個windows批處理檔案進行修改,想想應該挺小菜的,網上應該容易找的到。。 萬萬沒想到。。。 記下來,萬一有誰和我一樣抽風...,提供

Python 處理iOS ipa檔案裡面的.plist

前言 在用python做指令碼的時候,需要操作到iOS打包出來的ipa檔案的plist檔案。 解決方案 1、先寫入本地再讀取 # 讀寫檔案 fp = open("1.plist"

python處理多行檔案內容

工作中需要切換程式執行環境,於是要改配置檔案內容,便想到了用指令碼實現,便於切換。剛開始用vbs寫的,廢了老大勁還沒做出來,同事說python更好用點,一直也想學習下python,正好這是一次機會。 整個指令碼需要做的事是在檔案中查到需要改的語句後替換為另一語句,還需通過關

Python解析大XML檔案及讀取XML不全的問題

之前用python的minidom寫過解析xml的指令碼檔案,在前期是比較好用的,因為xml檔案比較小。但是當xml檔案超過了70M的時候,minidom不僅效率低,而且會佔用非常大的記憶體空間,因為他是將整個xml讀入進去並且按照整個xml樹進行建樹(雖然這樣寫程式碼邏輯

Python處理"大"XLS檔案

權當學習Python練手用的. 檔案都是些什麼內容? ’Accident_Index’, ‘Location_Easting_OSGR’, ‘Location_Northing_OSGR’, ‘Longitude’, ‘Latitude’, ‘

使用python處理中文csv檔案,並讓excel正確顯示中文(避免亂碼)

使用python2處理中文時,經常會出現亂碼問題,之前使用python處理中文csv檔案時,處理過程程式輸出出現了亂碼,最後在程式中能夠正常顯示出中文,但是匯出檔案時,使用excel打開出現了中文亂碼問

Python 處理HTML/XML——Beautiful Soup4

Beautiful Soup 是一個可以從HTML或XML檔案中提取資料的Python庫.本文為Beautiful Soup屬性方法總結,更多例子請查閱官方文件$ pip install beautifulsoup4    #debian或Ubuntu下可以 $ apt-

XML檔案處理工具 ---XMLUtils

package com.jeeplus.mobile.utils; import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.util.

[python 學習] 使用 xml.etree.ElementTree 模塊處理 XML

get try country cost 元素 rar ges 導入 nbsp ---恢復內容開始--- 導入數據(讀文件和讀字符串) 本地文件 country_data.xml <?xml version="1.0"?> <data> &

python記錄-json.loads() :JSONDecodeError: Invalid escape

key 結果 sys ref pen ket cape sel port 環境:python3.6 json文件: { "src_dir" : "C:\\Users\\admin\\Desktop\\99\\apkobb", "buc