假设文件如下所示:
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的情况。
答案 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)