我相对较新的Python(使用v2.7.3),我决定通过编辑包含我手机上收到的所有文本的文本文档来测试我的技能。我想编辑出无用的信息,所以我写了一个脚本来做到这一点,但是文字之间的所有空格都被删除了。
以下是输入数据的示例:
sms protocol =“932”address =“XXXXXXXXXX”date =“1305655717379”type =“1”subject =“null”body =“与乔伊交谈?” 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”/>
以下是输出数据的示例:
体= “?Talktojoey” TOA = “空” sc_toa = “空” service_center = “空” 读= “1” 状态= “ - 1” 锁定= “0” DATE_SENT = “空” 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()
任何有关如何添加空间的帮助将不胜感激。谢谢!
答案 0 :(得分: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'}
答案 1 :(得分:1)
这一点......
line = line.split(' ')
在将其拆分成碎片时删除空格。您需要将它们添加回来:
line = line.split(' ')
del line[0:6]
line = ' '.join(line)
line += "\n"
print line,
output.write(line)
答案 2 :(得分:0)
这里的问题是你正在呼叫output.writelines(line)
。
我不确定在给出字符串列表时你期望做什么,但你不能指望将它们打印成中间有空格的单词。这些单词不是单独的行,你不希望那样。
那么,如何将单词列表加入单个字符串中,并用空格分隔单词?使用join
方法:
' '.join(line)
然后,不要使用writelines
(需要多行),而只需使用write
:
output.write(' '.join(line))
请参阅Input and Output上的教程,了解write
和writelines
(以及其他内容)之间的差异。