【问题标题】:Adding spaces within a string in Python?在 Python 中的字符串中添加空格?
【发布时间】:2013-02-04 14:55:43
【问题描述】:

我对 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="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()

任何有关如何添加空格的帮助将不胜感激。谢谢!

【问题讨论】:

  • 不使用del,使用line = line[7:]
  • @Hiroto:不错的建议,但它与他的问题有什么关系?
  • @abarnet 不是,但我只是在吹毛求疵,他说他是 python 新手,这就是为什么它是一个评论。
  • @Hiroto:但是没有解释有什么区别,或者他为什么要关心,我不确定它是否很有用。

标签: python string space


【解决方案1】:

如果您仔细查看您的数据行,您会发现它是缺少前导“

>>> 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'}

【讨论】:

  • 谢谢,我没想到要检查Python中是否有xml函数。这是我将来一定要做的事情。再次感谢。
【解决方案2】:

这点...

line = line.split(' ')     

在将其拆分为碎片时删除空格。您需要重新添加它们:

line = line.split(' ')     
del line[0:6]
line = ' '.join(line)
line += "\n"
print line,
output.write(line)

【讨论】:

  • 这行不通。一方面,你会在那个line.append 上得到一个AttributeError
【解决方案3】:

这里的问题是你打电话给output.writelines(line)

我不确定当给定一个字符串列表时你期望它做什么,但你不能期望将它们打印为中间有空格的单词。这些词不是单独的行,你不希望它们那样。

那么,如何将单词列表连接成一个字符串,并用空格分隔单词?使用join 方法:

' '.join(line)

然后,不要使用writelines(需要多行),而是使用write

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

请参阅Input and Output 上的教程,了解writewritelines(以及其他内容)之间的区别。

【讨论】:

  • 感谢您的帮助。我首先尝试使用 output.write,但它导致了缓冲区错误。无论出于何种原因, output.writelines 都没有导致错误,所以我使用它运行。你的建议很有效,我很感激。
猜你喜欢
  • 1970-01-01
  • 2021-06-08
  • 2020-09-16
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2011-04-28
相关资源
最近更新 更多