我正在读一个文件,每行都有一个标签,然后是冒号,然后是我想要的信息。示例文件看起来像
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]
此代码不起作用,但希望您了解我要做的事情。我将如何完成这项工作?
答案 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
循环引用为tags
,split.line
代替line.split()
,值不会被剥离。
答案 1 :(得分:1)
我建议您在:
分割,然后测试第一部分是否是您的关键字之一。使用set
和in
运算符
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)