Python:如果字符串以列表中的字符串开头

时间:2012-01-08 16:14:35

标签: python loops dictionary apt

我正在读一个文件,每行都有一个标签,然后是冒号,然后是我想要的信息。示例文件看起来像

Package: com.something.something
Section: Utilities
Name: Something

等,(如果你想知道这是一个简单的包索引)
所以我想循环遍历每一行,看看该行是否以列表中的元素开头。我在想像

PkgInfo={}
Tags=['Package', 'Section', 'Name']
for line in reader.readlines()
    if line.startswith(element in Tags):
        PkgInfo[element]=line.split(': ')[1]

此代码不起作用,但希望您了解我要做的事情。我将如何完成这项工作?

6 个答案:

答案 0 :(得分:1)

逻辑略有不同的工作解决方案:

PkgInfo={}
Tags=['Package', 'Section', 'Name']


for line in reader.readlines():
    entry = line.strip().split(': ', 2)
    if len(entry) != 2:
        continue
    element, value = entry[0], entry[1]
    if element in Tags:
        PkgInfo[element] = value

print PkgInfo

并注意迭代元素不仅是一个问题。 Tags中的“套餐”定义为“套餐:”,Tags循环引用为tagssplit.line代替line.split(),值不会被剥离。

答案 1 :(得分:1)

我建议您在:分割,然后测试第一部分是否是您的关键字之一。使用setin运算符

可以轻松完成此操作
tags = set(['Package', 'Section', 'Name'])
pkgInfo = {k: v.strip() for k, v in (line.split(':') for line in reader) if k in tags}

或更长的版本:

tags = set(['Package', 'Section', 'Name'])
pkgInfo = {}

for line in reader:
    k, v = line.split(':')
    if k in tags:
        pkgInfo[k] = v.strip()

但请注意,如果每行中没有一个冒号,则会失败。

答案 2 :(得分:1)

试试这个:

PkgInfo = {}
Tags = ['Package', 'Section', 'Name']

for line in reader.readlines():
    for element in Tags:
        if line.startswith(element):
            PkgInfo[element] = line.split(': ')[1]
            break

答案 3 :(得分:1)

基于split()的所有解决方案的问题是,如果冒号出现多次,它们可能会中断。这不太优雅,但更强大:

PkgInfo = {}
Tags = ['Package','Section','Name']
splitter = ': '
splitLen = len(splitter)
for line in reader.readlines():
  firstColon = line.find(splitter)
  if firstColon > 0: 
    key = line[:firstColon]
    if key in Tags:
      pkgInfo[key] = line[firstColon + splitLen:] 

答案 4 :(得分:0)

你需要迭代标签:

PkgInfo={}
Tags=['Package: ', 'Section', 'Name']
for line in reader.readlines():
    for tag in Tags:
        if line.startswith(tag):
            PkgInfo[tag]=line.split(': ')[1]
            break

答案 5 :(得分:0)

我会尝试这样的事情:

 PkgInfo={}
 #I assume it should be 'Package' not 'Package: '
 Tags=['Package', 'Section', 'Name']

 for line in reader.readlines()
    k, v = line.split(': ')
    if k in Tags:
        PkgInfo[k] = v

甚至更快更脏的两个衬垫:

 #I assume it should be 'Package' not 'Package: '
 Tags=['Package', 'Section', 'Name']

 PkgInfo = dict(line.split(': ') for line in reader.readlines() if line.split(': ')[0] in Tags)