1

我对 Python 比较陌生(使用 v2.7.3),我决定通过编辑包含我在手机上收到的所有文本的文本文档来测试我的技能。我想编辑掉无用的信息,所以我写了一个脚本来做到这一点,但是单词之间的所有空格都被删除了。

这是输入数据的示例:

短信协议=“932”地址=“XXXXXXXXXX”日期=“1305655717379”类型=“1”主题=“空”正文=“和乔伊说话?” 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" 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 片段。如果您添加“<”,您现在将拥有一个“短信”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))

请参阅有关输入和输出write的教程,了解和writelines(以及其他内容)之间的区别。

于 2013-02-19T19:41:48.007 回答