2016-12-21 7 views
0

私のpython 3スクリプトはXMLファイルを受け取り、csvファイルを作成します。Python 3:XMLタグの値がCSVファイルに書き込まれない

xmlファイルの小さな抜粋:

<?xml version="1.0" encoding="UTF-8" ?> 
    <metadata> 
    <dc> 
    <title>Golden days for boys and girls, 1895-03-16, v. XVI #17</title> 
    <subject>Children's literature--Children's periodicals</subject> 
    <description>Archives &amp; Special Collections at the Thomas J. Dodd Research Center, University of Connecticut Libraries</description> 
    <publisher>James Elverson, 1880-</publisher> 
    <date>1895-06-15</date> 
    <type>Text | periodicals</type> 
    <format>image/jp2</format> 
    <handle>http://hdl.handle.net/11134/20002:860074494</handle> 
    <accessionNumber/> 
    <barcode/> 
    <identifier>20002:860074494 | local: 868010272 | local: 997186613502432 | local: 39153019382870 | hdl:  | http://hdl.handle.net/11134/20002:860074494</identifier> 
    <rights>These Materials are provided for educational and research purposes only. The University of Connecticut Libraries hold the copyright except where noted. Permission must be obtained in writing from the University of Connecticut Libraries and/or theowner(s) of the copyright to publish reproductions or quotations beyond "fair use." | The collection is open and available for research.</rights> 
    <creator/> 
    <relation/> 
    <coverage/> 
    <language/> 
    </dc> 
    </metadata> 

のpython3コード:

import csv 
import xml.etree.ElementTree as ET 

tree = ET.ElementTree(file='ctda_set1_uniqueTags.xml') 
doc = ET.parse("ctda_set1_uniqueTags.xml") 
root = tree.getroot() 

oaidc_data = open('ctda_set1_uniqueTags.csv', 'w', encoding='utf-8') 

titles = 'dc/title' 
subjects = 'dc/subject' 

csvwriter = csv.writer(oaidc_data) 
oaidc_head = ['Title', 'Subject', 'Description', 'Publisher', 'Date', 'Type', 'Format', 'Handle', 'Accession Number', 'Barcode', 'Identifiers', 'Rights', 'Creator', 'Relation', 'Coverage', 'Language'] 

count = 0 
for member in root.findall('dc'): 
    if count == 0: 
     csvwriter.writerow(oaidc_head) 
     count = count + 1 

    dcdata = [] 
    titles = member.find('title').text 
    dcdata.append(titles) 
    subjects = member.find('subject').text 
    dcdata.append(subjects) 
    descriptions = member.find('description').text 
    dcdata.append(descriptions) 
    publishers = member.find('publisher').text 
    dcdata.append(publishers) 
    dates = member.find('date').text 
    dcdata.append(dates) 
    types = member.find('type').text 
    dcdata.append(types) 
    formats = member.find('format').text 
    dcdata.append(formats) 
    handle = member.find('handle').text 
    dcdata.append(handle) 
    accessionNo = member.find('accessionNumber').text 
    dcdata.append(accessionNo) 
    barcodes = member.find('barcode').text 
    dcdata.append(barcodes) 
    identifiers = member.find('identifier').text 
    dcdata.append(identifiers) 
    rt = member.find('rights').text 
    print(member.find('rights').text) 
    dcdata.append('rt') 
    ct = member.find('creator').text 
    dcdata.append('ct') 
    rt = member.find('relation').text 
    dcdata.append('rt') 
    ce = member.find('coverage').text 
    dcdata.append('ce') 
    lang = member.find('language').text 
    dcdata.append('lang') 
    csvwriter.writerow(dcdata) 

oaidc_data.close() 

RT、CE、およびLANGを除くすべてが期待どおりに動作します。何が起こるかは、CSVではすべてのデータがコンマ区切り文字で書かれています。 RTの場合、値は常に室温され、CEのために、CE、LANG、LANGなど

は、ここで出力の抜粋です:

Title,Subject,Description,Publisher,Date,Type,Format,Handle,Accession Number,Barcode,Identifiers,Rights,Creator,Relation,Coverage,Language 

"Golden days for boys and girls, 1895-03-16, v. XVI #17",Children's literature--Children's periodicals,"Archives & Special Collections at the Thomas J. Dodd Research Center, University of Connecticut Libraries","James Elverson, 1880-",1895-06-15,Text | periodicals,image/jp2,hdl.handle.net/11134/20002:860074494,,,20002:860074494 | local: 868010272 | local: 997186613502432 | local: 39153019382870,**rt,ct,rt,ce,lang** 

が権利文のいくつかは、非常に長い取得は - 多分それが問題です。そのため、出力を確認するためにprint(member.find('rights'))を追加しました。テキストはうまく印刷されます。テキストはcsvに書き込まれません。私が望むのは、これらのxmlタグのために書かれた値やテキストを持つことです。どんな助けもありがとう。

ありがとうございました。 ジェニファー

答えて

1

dcdata.append('rt')には、引用符の必要はありません。試してくださいdcdata.append(rt)。同様に、celang行に不要な引用符があります。

+0

もちろん。それを指摘していただきありがとうございます。もう一度それを見ていただきありがとうございます。 – Jennifer

関連する問題