Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用for循环的替代方法_Python - Fatal编程技术网

Python 使用for循环的替代方法

Python 使用for循环的替代方法,python,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 您可以始终使用变量进行匹配,例如: pattern1 = "abcd" pa

假设一个文件如下所示:

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

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

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(' ')

在循环中使用此选项可以相应地访问行中的第一个和第二个单词。

我不知道是否理解您的意图,但我希望下面的代码将对您有所帮助<代码>关键字模拟动态变化的变量

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]
从您的问题(并作出假设)来看,似乎您希望浏览文件中的每一行,然后检查该行的文本是否与其他内容匹配。假设您有一个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()

有关读取文件的详细信息

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

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)))
您可能需要这样(某种动态关键字计数器):


“动态变化”是什么意思?请提供一个“abcd”和“xyz”动态更改”的示例。你是说“abcd”和“xyz”可以是任意字符串,但在运行时是固定的吗?什么是“动态更改”的确切含义?定义“动态更改”并不是一个循环。YiFei的想法是正确的。如何计算每个键包含的元素数?还有,如果文件是外部文件而不是内部定义的文件,该怎么办?@identical123456我已经编辑了我的问题,提供了每个键的元素数。版本适用于python 2.x,如果使用3.x,请将iteritems()替换为items(),如果格式为abcd a1、abcd a2、abcd b1等,该怎么办。。我需要计算abcd类型的a的数量和abcd类型的b的数量,以及其他字符串的数量
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)