我有一个带有序列号的文本文档,并且我想创建一个程序,在其中运行一个函数,该函数可以告诉您某个特定序列号在文本文档中出现了多少次。我希望参数可以是无限的,因为我可以要求输入3个不同的序列号或仅输入1。
list of serial numbers:
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4e
nmos_4e
pmos_4e
nmos_4e
pmos_4t
pmos_4f
nmos_4t
nmos_4f
pmos_4t
pmos_4f
nmos_4t
nmos_4f
current code:
def find_serial(*serial):
f = open('C:/Users/joann/Desktop/pmos.txt', 'r')
for z in range(len(serial)):
x = 0
lines = f.readlines()
for i in lines:
if (serial[z-1] in i):
x += 1
print(x)
f.close()
当我运行它时,我得到了第一个值出现的次数,但其余的显示为0。
>>> find_serial('pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f')
6
0
0
0
答案 0 :(得分:1)
解决方案更新
filename = "serials.txt"
def find_serial(*serial):
serial_1, serial_2, serial_3, serial_4 = serial
serials = [serial_1, serial_2, serial_3, serial_4]
f = open('serials.txt', 'r')
contents = f.read().split()
for i in serials:
x = 0
for j in contents:
if i == j:
x +=1
print(f"{i} count: {x}")
find_serial('pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f')
相同的解决方案,但我注意到您想一次将所有参数传递给该函数,因此我重新编写了该函数,以便您可以按预期的方式执行find_serial
函数!
Solution_Original
filename = "serials.txt"
def find_serial(serial):
f = open('serials.txt', 'r')
contents = f.read().split()
x = 0
for i in contents:
if i == serial:
x +=1
print(f"{serial} count: {x}")
serials = ['pmos_4e', 'nmos_4e', 'pmos_4t', 'pmos_4f']
for i in serials:
find_serial(i)
使用f.read().split()
将为我们提供一个列表,其中包含文本中的每个单词,并且由于所有这些序列号都是一个单词,因此这是一个使用此单词的好机会。然后,我们可以使用for i in contents
并将i
与我们的serial
进行比较,并增加x
的数量。
输出
(xenial)vash@localhost:~/python$ python3.7 helpin.py pmos_4e count: 6 nmos_4e count: 6 pmos_4t count: 6 pmos_4f count: 6
答案 1 :(得分:0)
您仅看到第一个值,因为您仅持有一个计数器并单独递增它。
实现目标的最佳方法是简单地使用collections.counter:
from collections import Counter
with open('C:/Users/joann/Desktop/pmos.txt', 'r') as f:
content = f.read()
count = Counter(content.split())
那么您可以简单地做:
count['pmos_4e']
获取您要查找的号码
最终的代码应如下所示:
def find_serial(*serials):
with open('C:/Users/joann/Desktop/pmos.txt', 'r') as f:
content = f.read()
count = Counter(content.split())
for serial in serials:
print(count[serial])
(如您所见,不需要两个循环...)