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)