1

私は Python (v2.7.3 を使用) に比較的慣れていないので、電話で受信したすべてのテキストで構成されるテキスト ドキュメントを編集してスキルをテストすることにしました。不要な情報を編集したいのでスクリプトを書いたのですが、単語間のスペースがすべて削除されています。

入力データのサンプルを次に示します。

sms protocol="932" address="XXXXXXXXXX" date="1305655717379" type="1" subject="null" body="Joey と話しますか?" toa="null" sc_toa="null" service_center="null" read="1" status="-1" locked="0" date_sent="null" readable_date="2011 年 5 月 17 日 2:08:37 PM" contact_name="デビッド XXXX" />

出力データのサンプルを次に示します。

body="Talktojoey?"toa="null"sc_toa="null"service_center="null"read="1"status="-1"locked="0"date_sent="null"readable_date="May17,20112:08 :37PM"contact_name="DavidXXXX/>

これが私のコードです:

line= textfile.readline() 
for line in textfile:

    line = line.strip() 
    line = line.split(' ')     
    del line[0:6]
    line.append("\n")
    print line
    output.writelines(line)

textfile.close()

output.close()

スペースを追加する方法についての助けをいただければ幸いです。ありがとう!

4

3 に答える 3

2

データ行をよく見ると、先頭の「<」が欠落している xml のフラグメントであることがわかります。「<」を追加すると、「sms」xml 要素が作成されます。

>>> input = '<sms protocol="932" address="XXXXXXXXXX" date="1305655717379" type="1" subject="null" body="Talk to joey?" toa="null" sc_toa="null" service_center="null" read="1" status="-1" locked="0" date_sent="null" readable_date="May 17, 2011 2:08:37 PM" contact_name="David XXXX" />'

これを ElementTree などで処理できます。

>>> import xml.etree.ElementTree as ET
>>> element = ET.fromstring(input)

これで、わかりやすい辞書としてタグの属性にアクセスできます。

>>> element.attrib 
{'body': 'Talk to joey?', 'service_center': 'null', 'protocol': '932', 'read': '1', 'sc_toa': 'null', 'readable_date': 'May 17, 2011 2:08:37 PM', 'date': '1305655717379', 'status': '-1', 'address': 'XXXXXXXXXX', 'date_sent': 'null', 'locked': '0', 'contact_name': 'David XXXX', 'toa': 'null', 'type': '1', 'subject': 'null'}
于 2013-02-19T19:48:55.317 に答える
1

このビット...

line = line.split(' ')     

分割するときにスペースを削除します。それらを再度追加する必要があります:

line = line.split(' ')     
del line[0:6]
line = ' '.join(line)
line += "\n"
print line,
output.write(line)
于 2013-02-19T19:30:14.703 に答える
0

ここでの問題は、 を呼び出していることですoutput.writelines(line)

文字列のリストが与えられたときに何を期待するかはわかりませんが、それらを間にスペースを含む単語として出力することは期待できませんでした。これらの単語は別々の行ではなく、そのようにしたくありません。

では、単語のリストを単一の文字列に結合し、単語をスペースで区切るにはどうすればよいでしょうか? メソッドの使用join:

' '.join(line)

そして、writelines(複数の行が必要です)を使用する代わりに、次を使用しますwrite

output.write(' '.join(line))

と(およびその他のもの)の違いについては、入力と出力に関するチュートリアルを参照してください。writewritelines

于 2013-02-19T19:41:48.007 に答える