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

2024-04-25 13:35:43 发布

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

我正在读取一个文件,每行有一个标记,后跟一个冒号,然后是我想要的信息。一个样本文件看起来像

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

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

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

这段代码不起作用,但希望你能理解我的意图。我怎样才能完成这件事?


Tags: 文件namein标记com信息packageline
3条回答

基于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:] 

试试这个:

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

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

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

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中的Package'被定义为'Package:',Tags在循环中被引用为tagssplit.line而不是line.split(),值不会被剥离。

相关问题 更多 >