在每行的末尾加上横线,包括

2024-06-17 17:18:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个有大量行的列表,每行都采用主谓宾形式,例如:

Jane likes Fred
Chris dislikes Joe
Nate knows Jill

要绘制一个网络图,在有向颜色编码的边上表示节点之间的不同关系,我需要用箭头替换动词,并在每行的末尾放置一个颜色代码,因此,稍微简化了:

^{pr2}$

只有少量的动词,所以用箭头替换它们只是几个搜索和替换命令的问题。然而,在此之前,我需要在每一行对应于该行的动词的末尾放置一个颜色代码。我想用Python来做这个。在

这些是我在编程方面的小步骤,所以请明确并包括在文本文件中读取的代码。在

谢谢你的帮助!在


Tags: 列表动词箭头fred形式chrislikesjoe
3条回答

听起来你想研究dictionaries和{a2}。一般来说,如果您需要编程帮助,只需将您遇到的任何问题分解成非常小的、离散的块,独立地搜索这些块,然后您就可以将所有这些问题组合成一个更大的答案。对于这种类型的搜索,堆栈溢出是一个很好的资源。在

另外,如果您对Python有任何普遍的好奇,请搜索或浏览official Python documentation。如果你发现自己总是不知道从哪里开始,读一读Python tutorial或找本书来复习。一周或两周的投资,让你对你正在做的事情有一个很好的基础知识,当你完成工作时,会一次又一次地得到回报。在

verb_color_map = {
    'likes': 'red',
    'dislikes': 'blue',
    'knows': 'black',
}

with open('infile.txt') as infile: # assuming you've stored your data in 'infile.txt'
    for line in infile:
        # Python uses the name object, so I use object_
        subject, verb, object_ = line.split()
        print "%s -> %s %s;" % (subject, object_, verb_color_map[verb])

足够简单;假设动词列表是固定的并且很小,那么使用字典和for循环就很容易做到这一点:

VERBS = {
    "likes": "red"
  , "dislikes": "blue"
  , "knows": "black"
  }

def replace_verb (line):
    for verb, color in VERBS.items():
        if verb in line:
            return "%s %s;" % (
                  line.replace (verb, "->")
                , color
                )
    return line

def main ():
    filename = "my_file.txt"
    with open (filename, "r") as fp:
        for line in fp:
            print replace_verb (line)

# Allow the module to be executed directly on the command line
if __name__ == "__main__":
    main ()
verbs = {"dislikes":"blue", "knows":"black", "likes":"red"}
for s in open("/tmp/infile"):
  s = s.strip()
  for verb in verbs.keys():
    if (s.count(verb) > 0):
      print s.replace(verb,"->")+" "+verbs[verb]+";"
      break

编辑:使用“for s in open”

相关问题 更多 >