我编写了一个批处理脚本,该脚本通过Chocolatey和FOG部署到我们的网络,该脚本获取机器的序列号,然后通过.txt将其弹出到带有序列号所属PC名称的文件中:
net use y: \192.168.4.104shared
wmic bio get serialnumber > Y:ITSSoftwareSerial_Numbers%COMPUTERNAME%.txt
net use y: /delete
文件夹Serial_Numbers随后填充了带有校园中每台计算机名称的.txts。 考虑到这一点,我想编写一个 Python 脚本来遍历并获取每个.txt名称和第二个内部字符串以形成一个字典,您可以在其中调用 PC 的名称,并返回序列号。
我知道我将如何创建字典并从中调用,但是我在弄清楚如何正确获取.txt的名称和第二个内部字符串时遇到了麻烦,任何帮助将不胜感激。
.txt文件的格式:
SerialNumber
#############
您可以使用 os.listdir 列出目录文件和列表理解以过滤它们。
使用 glob 列出目录中的文件。
您只需阅读第一行并在填充字典时停止使用该文件,您就完成了:
import glob
d = {}
# loop over '.txt' files only
for filename in glob.glob('/path_to_Serial_Numbers_folder/*.txt'):
with open(filename, 'r') as f:
file_name_no_extension = '.'.join(filename.split('.')[:-1])
d[file_name_no_extension] = f.readline().strip()
print d
import glob
data = {}
for fnm in glob.glob('*.txt'):
data[fnm[:-4]] = open(fnm).readlines()[1].strip()
或者,更简洁地说
import glob
data = {f[:-4]:open(f).readlines()[1].strip() for f in glob.glob('*.txt')}
在上面的字典理解中,
-
f[:-4]
是除最后四个字符(即".txt")之外的文件名, -
open(f).readlines()[1].strip()
是文件的第二行对象和最终 -
f
是glob.glob()
返回的文件名列表中的一个元素。