1

OFX エクスポート ファイルの xml フィールドを変更しようとしています。エクスポートのプロデューサーは、ファイルにファイルされている fitid の一意のキーを生成しないため、そのフィールドを xml の他の 2 つのフィールドから生成された一意のキーに置き換えたいと考えています。

私は次のコードまで取得しましたが、新しい FITID フィールドを記述する方法がわかりません。

XML ファイルのサンプルは次のとおりです。

    <BANKTRANLIST>
                <DTSTART>20130705</DTSTART>
                <DTEND>20130805</DTEND>
                <STMTTRN>
                    <TRNTYPE>DEBIT</TRNTYPE>
                    <DTPOSTED>20130708</DTPOSTED>
                    <TRNAMT>-7.99</TRNAMT>
                    <FITID>08072013660</FITID>
                    <NAME>HARE HATCH SHEEPLANDS    </NAME>
                    <MEMO>Effective date: 06/07/2013</MEMO>
                </STMTTRN>
                <STMTTRN>
                    <TRNTYPE>DEBIT</TRNTYPE>
                    <DTPOSTED>20130708</DTPOSTED>
                    <TRNAMT>-6.75</TRNAMT>
                    <FITID>08072013660</FITID>
                    <NAME>BINGHAMS BREWERY LIMIT   </NAME>
                    <MEMO>Effective date: 06/07/2013</MEMO>
                </STMTTRN>
                <STMTTRN>
                    <TRNTYPE>DEBIT</TRNTYPE>
                    <DTPOSTED>20130709</DTPOSTED>
                    <TRNAMT>-282.5</TRNAMT>
                    <FITID>09072013660</FITID>
                    <NAME>WWW.DVLA.GOV.UK          </NAME>
                    <MEMO>Effective date: 08/07/2013</MEMO>
                </STMTTRN>
                <STMTTRN>
                    <TRNTYPE>DEBIT</TRNTYPE>
                    <DTPOSTED>20130715</DTPOSTED>
                    <TRNAMT>-84.78</TRNAMT>
                    <FITID>15072013660</FITID>
                    <NAME>BP TWYFORD CONNECT       </NAME>
                    <MEMO>Effective date: 12/07/2013</MEMO>
                </STMTTRN>
                <STMTTRN>
                    <TRNTYPE>DEBIT</TRNTYPE>
                    <DTPOSTED>20130715</DTPOSTED>
                    <TRNAMT>-25.1</TRNAMT>
                    <FITID>15072013660</FITID>
                    <NAME>WHITE HART SHERFIE       </NAME>
                    <MEMO>Effective date: 13/07/2013</MEMO>
                </STMTTRN>
    </BANKTRANLIST>

私のpythonの試みは次のとおりです。

    from xml.etree import ElementTree as et

    datafile = '/Volumes/Data/Projects/moneydance fix/statement20130805.ofx'

    tree = et.parse(datafile)
    root = tree.getroot()
    for stmtrn in root.iter('STMTTRN'):
    amount = stmtrn.find('TRNAMT').text
    date = stmtrn.find('DTPOSTED').text
    fitid = stmtrn.find('DTPOSTED').text
    print "amount: ", (amount.split('.')[0])[1:]
    amount = (amount.split('.')[0])[1:]

    fitid.text = (date + amount).ljust(12,'0')
    print 'New fitid: ', fitid

    tree.write(datafile+'new')
4

1 に答える 1

1

問題は、fitid の場合text、要素の が必要ではなく、要素自体が必要なことです。だから、あなたはやりたくないのですstmtrn.find('FITID').textが、むしろstmtrn.find('FITID'). これにより、割り当てがfitid.text = ....期待どおりに機能します。

fitid = stmtrn.find('DTPOSTED')そして、あなたが貼り付けたコードのタイプミスであると私が信じていることは、間違いなくやりたくないでしょう。

このコードを試してください:

from xml.etree import ElementTree as et

datafile = 'statement20130805.ofx'

tree = et.parse(datafile)
root = tree.getroot()
for stmtrn in root.iter('STMTTRN'):
  amount = stmtrn.find('TRNAMT').text
  date = stmtrn.find('DTPOSTED').text

  print "amount: ", (amount.split('.')[0])[1:]
  amount = (amount.split('.')[0])[1:]

  fitid = stmtrn.find('FITID')
  fitid.text = (date + amount).ljust(12,'0')
  print 'New fitid: ', fitid.text

tree.write(datafile+'new')
于 2013-08-30T22:56:08.513 に答える