首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除python中的字符中间字符串(可迭代)

删除python中的字符中间字符串(可迭代)
EN

Stack Overflow用户
提问于 2012-01-18 00:35:22
回答 4查看 137关注 0票数 3

我有一个很长的字符串列表,其中包含4条信息。我是通过在空格中分割它们来建立索引的。不幸的是,在一些字符串中,第二条信息中也有一个空格。我希望能够删除两个冒号之间的任何空格。下面是列表中的几个项目来演示:

国外a:at:n请求1 国外a:at:n静默1 国外a:时间6:n 国外a:因为:n附表1 国外a:由:北美1 海外a:由:N银行1 国外a:通过:n blow 1

所以,我的问题出现在上面的第4行。显然,我可以手动删除这个空间来解决这个问题,但是这个列表有数千行。此外,我还可以用“因”代替任何出现的“因”,但这并不是唯一出现的两个单词序列。此外,第三片有时包含“因为”,我想保留那里的空白。我的当前代码试图返回每个序列的频率,如下所示:

代码语言:javascript
运行
复制
import sys
import pprint

occ_list = []
observed = {}

lines = sys.stdin.readlines()

for line in lines:
    l = line.strip()
    i = l.split(' ')
    word = i[0]
    rel = i[1]
    wirts = i[2:-1]
    wirt = ' '.join(wirts)  # Word-in-relation-to (which may be compund)
    occ = i[-1]             # Frequency of specific "word, rel, wirt"
    arb = (word, rel, wirt)
    occ_list.append(int(occ))

    if not arb in observed.keys():
            observed[arb] = []
    if not occ in observed[arb]:
            observed[arb].append(int(occ)/float(1064542))

pprint.pprint(observed)

除了上面提到的带有额外空格的行外,这是可行的。

如有任何建议,我将不胜感激。(我正在使用python 3.2)谢谢

EN

回答 4

Stack Overflow用户

发布于 2012-01-18 00:57:39

从在空格处分割开始。如果第二项不包含空白,那么其中应该包含两个冒号;如果只有一个冒号,那么第二个项中就有空白,因此第二个和第三个项是单个项的一部分。

代码语言:javascript
运行
复制
parts = line.split()
if parts[1].count(":") == 1:
    parts[1 : 3] = [" ".join(parts[1 : 3])]
票数 1
EN

Stack Overflow用户

发布于 2012-01-18 00:58:51

除了第二条信息之外,您的文本文件中还有冒号吗?如果不是的话,我建议在结肠上分开来移除空格。但是,如果您希望允许在其他信息片段中使用其他冒号,那么我建议使用(regex)模块。

代码语言:javascript
运行
复制
# Split on colons:
bits = l.split(':')
# remove spaces in the second part
bits[1] = bits[1].replace(' ','')
# join again
l = ':'.join(bits)
# do rest of code.

另外,你在我想的问题中提到了这一点,但我想澄清一下。你有这样的台词吗?

代码语言:javascript
运行
复制
abroad a:by:because of american 1

在这种情况下,你想让rel成为a:by:because of吗?

信息第3部分(wirts)是否可以是多个词?那麽:

代码语言:javascript
运行
复制
abroad a:by:because of american silence 2

你怎么知道哪个词属于哪个词?

我认为,在这种情况下,您需要有一个包含a:by:xxxx中允许的空格的单词字典。

票数 0
EN

Stack Overflow用户

发布于 2012-01-18 02:13:34

使用正则表达式:

代码语言:javascript
运行
复制
#!/usr/bin/env python
import fileinput
import re
from collections import defaultdict
from pprint import pprint

occ_list = []
observed = defaultdict(list)
for line in fileinput.input():
    m = re.search(r"(\S+)\s+([^:]+:[^:]+:\S+)\s+(\S+)\s+(\d+)", line)
    if m:
       word, rel, wirt, occ = m.groups()
       occ = int(occ)
       occ_list.append(occ)
       observed[word, rel, wirt].append(occ / 1064542.0)

pprint(occ_list)
pprint(dict(observed))

输出

代码语言:javascript
运行
复制
[1, 1, 6, 1, 1, 1, 1]
{('abroad', 'a:at:n', 'request'): [9.393711098293914e-07],
 ('abroad', 'a:at:n', 'silence'): [9.393711098293914e-07],
 ('abroad', 'a:at:n', 'time'): [5.636226658976349e-06],
 ('abroad', 'a:because of:n', 'schedule'): [9.393711098293914e-07],
 ('abroad', 'a:by:n', 'american'): [9.393711098293914e-07],
 ('abroad', 'a:by:n', 'bank'): [9.393711098293914e-07],
 ('abroad', 'a:by:n', 'blow'): [9.393711098293914e-07]}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8903695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档