我目前正在尝试读取文件中冒号':'后发生的所有数据。 在仅包含:
的文本文件中SAM帐户类型:805306368
with open("Sample.txt") as myfile:
for line in myfile:
flag=0
if ("SAM Account Type" in line):
for ch in line:
if (flag and ch!=' ' and ch!='\n'):
B+=ch
elif (ch == ':'):
flag+=1
S1 = myfile.read(10)
# print (ch)
elif (ch=='\n'):
flag =0
else:
pass
print (B)
这就像一个只显示我的魅力“805306368” 但是当我尝试使用列表检查“SAM帐户类型”以外的更多变量时,它无法提供正确的输出。
例如下面的文件:
SAM帐户名称:Ramachandran。 S
SAM帐户类型:805306368
描述:
用户帐户控制:544
创建时间:09/21/2015 06:33:53
Lastlogontimestamp:130966421275783509
更改时间:01/07/2016 12:08:47
帐户到期日期:922337203685477580
上次注销:00:00:00.0000000
上次登录:130971364125825724
以下代码:
A = []
A.extend({"SAM Account Type",
"User Account Control",
"Last logon",
"Lastlogontimestamp",
"Last logoff",
"Account Expires"})
B = ""
with open("Sample.txt") as myfile:
for line in myfile:
for i in range(len(A)):
flag=0
if (str(A[i]) in line):
#if ("SAM Account Type" in line):
for ch in line:
if (flag and ch!=' ' and ch!='\n'):
B+=ch
elif (ch == ':'):
flag+=1
S1 = myfile.read(10)
elif (ch=='\n'):
flag =0
else:
pass
print (B)
B=""
其中所有字符读取属于列表'A'中的实体的':'后将所有字符存储在'B'中,并为每行打印B.
给出以下内容:
'805306368'
'544'
'130966421275783509'
'922337203685477580'
'130971364125825724'
什么时候应该给'上次注销',即'00:00:00.0000000' 但它不起作用。任何帮助都将受到高度赞赏。
答案 0 :(得分:5)
我认为您可以阅读所有行并根据您的要求处理它们。您可以根据":"分割句子。并使用令牌。
注意:由于时间也有:在其中,你可能想要使用" :" (带2个空格的冒号)
示例代码:
In [1]: with open("./input.txt") as f:
...: data = f.readlines()
...:
In [2]: data = [d for d in data if d!='\n'] #Drop empty lines
In [3]: data = [d[:-1].split(" : ") for d in data] # exclude \n (last char in the line) and split based on colon
In [4]: data
Out[4]:
[['SAM Account Name', 'Ramachandran. S'],
['SAM Account Type', '805306368'],
['Description :'],
['User Account Control', '544'],
['When Created:09/21/2015 06:33:53'],
['Lastlogontimestamp', '130966421275783509'],
['When Changed', '01/07/2016 12:08:47'],
['Account Expires', '922337203685477580'],
['Last logoff', '00:00:00.0000000'],
['Last logon', '130971364125825724']]
此外,
答案 1 :(得分:1)
当您扫描特定字符串(即A中的字符串)时,我会在您的文件中创建每行的列表。
将每一行拆分为' : '
,这似乎是您的密钥与txt文件中的值之间的标准间隔。
您现在有一个列表,您可以扫描B
并将此列表的第一个元素与A
的内容进行比较。我们可以打印第二个元素(每个匹配后' : '
之后显示的内容:
B=[]
with open("Sample.txt") as f:
for line in f:
B.append(line.split(' : ')
for i in B:
if i[0] in A:
print i[1].strip() #this removes the \n
另一种“有趣”的方法是创建字典
c={}
with open("Sample.txt") as f:
for line in f:
t=line.split(' : ')
c.update({t[0]:t[1].split()})
for i in set(c.keys()) & set(A): #gives set of matches between keys and A
print c[1]
如果你涉及整个简洁的事情:
for i in open("Sample.txt").readlines():
if i[:i.index(' : ')] in A:
print i[i.index(' : ')+3:].split()[0]
最后:
print ''.join([i[i.index(' : ')+3:] for i in open("Sample.txt").readlines() if i[:i.index(' : ')] in A])
答案 2 :(得分:0)
如果你想要做的只是打印第一个冒号右边的值,如果他们在A中有一个字符串,那么你可以:
for line in myfile:
split_line = line.split(' : ', 1) #splits into list of two elements at first colon unless colon is not found, then a list of one element
if split_line[0] in A and len(split_line)==2:
print split_line[1].replace('\n', '')