使用for循环的替代方法

时间:2016-08-25 02:52:47

标签: python

假设文件如下所示:

abcd 1
abcd 2
abcd 3
xyz 1
xyz 2

我的代码:

if "abcd" in line:
  do something 

elif "xyz" in line:
  do something 

如果“abcd”和“xyz”都动态变化,我将如何通过编写相同的循环来捕获它们?

编辑:

我可以编写一个通用循环来计算abcd和xyz中的元素数量吗?没有服用abcd和xyz的情况。

5 个答案:

答案 0 :(得分:0)

您可以使用示例始终使用变量进行匹配:

pattern1 = "abcd"
pattern2 = "xyz"
for line in lines_list:
    if pattern1 in line:
        do_smth
    elif pattern2 in line:
        do_smth2
    pattern1 = get_new_pattern1()
    pattern2 = get_new_pattern2()

您还可以使用

将行拆分为单词
first, second = line.split(' ')

使用此循环来相应地访问第一个和第二个单词。

答案 1 :(得分:0)

我不知道我是否抓住了您的意图,但我希望以下代码可以帮助您。 keywords模拟动态变化的变量。

keywords = ['abcd', 'xyz', '123']
data = ['abcd',
        'xyz',
        'asdf',
        'asdf',
        '456',
        'abcd',
        'xyz',
        'abcd',
        'xyz',
        'abcd',
        'xyz',
        'abcd',
        'xyz',
        '123',
        '123']


counts = [ data.count(kw) for kw in keywords]
print(counts)  # [5, 5, 2]

答案 2 :(得分:0)

从您的问题(并做出假设),似乎您想要浏览文件中的每一行,而不是检查该行的文本是否与其他内容匹配。假设您有一个文件file.txt:

abcd 1
abcd 2
abcd 3
xyz 1
xyz 2

要阅读该文件,您可以:

filedata = open('file.txt', 'r') # Where r means read
first_match = 'abcd'
second_match = 'xyz'
for line in text:
    if first_match in line:
        # Do stuff here
    elif second_line in line:
        # Do other stuff here
    first_match = change_first_match()
    second_match = change_second_match()

有关阅读文件here

的更多信息

答案 3 :(得分:0)

我不确定我是否正确理解了您的问题,但这里有一种可能的方法来收集关键字&您文件中的值:

import re
from collections import defaultdict

file = """


abcd      1
abcd       2
abcd        3
xyz        1
xyz       2




"""

output = defaultdict(list)

for line in file.split("\n"):
    if line.strip() == "":
        continue

    key, value = re.search(r'(.*?)\s+(.*)', line).groups()
    output[key].append(value)

print(output)

for k, v in output.iteritems():
    print("{0} has {1} items".format(k, len(v)))

答案 4 :(得分:0)

您可能想要这种(某种动态关键字计数器):

with open("filename.txt") as f:
    d=dict()
    for line in f:
        line=line.rstrip("\n")
        s=line.split(" ") # works iff you have only space as delimeter
        if s[0] in d:
            d[s[0]]+=int(s[1]) # replace by 1 if needed
        else:
            d[s[0]]=int(s[1]) # replace by 1
    #print(d)