我有一个以制表符分隔的文件,其中有8列,例如具有以下上下文
Timestamp Process TID Area Category EventID Level Message Correlation
06/21/2014 09:19:02.94 wsstracing.exe (0x068C) 0x0698 SharePoint Foundation Tracing Controller Service 5152 Information Tracing Service started.
06/21/2014 09:19:09.94 hostcontrollerservice.exe (0x063C) 0x0670 SharePoint Server Unified Logging Service b8fx High ULS Init Completed (hostcontrollerservice.exe, Microsoft.Office.Server.Native.dll)
我目前拥有的代码
try:
with open('text.log') as f:
for l in f:
print(l.strip().split("\t")[5], end=" "),
print(l.strip().split("\t")[7], end=" "),
print(l.strip().split("\t")[8], end="\n")
except IndexError:
pass
给了我
EventID Message Correlation
5152 Tracing Service started. Press any key to continue . . .
正如你所看到的,它在第一个条目之后就停止了,因为第8列已经没有任何内容了
当我需要的是打印的东西是一样的,即使在相关列下没有任何东西
EventID Message Correlation
1124 blahblahblah blahblah
但是当我有以下代码
try:
with open('text.log') as f:
for l in f:
print(l.strip().split("\t")[5], end=" "),
print(l.strip().split("\t")[7])
但打印的格式是正确的,有人能提供帮助吗
您的
try
被包装在循环中,因此一旦发生一个错误,try
块就会停止执行并跳转到except
块,这意味着不会再发生迭代相反,您可以将
try
/except
放在for循环中但是,因为您知道不可能有第8个元素,所以它并不是真正的例外,如果您没有第6或第7个元素,它将隐藏错误
相反,试着用以下方法更好地控制你的逻辑:
当你做
.strip()
的时候,你会丢失后面的制表符,所以当你split()
的时候,这行会短一些。除此之外,您还多次执行相同的操作请尝试以下操作:
你为什么要把整件事都包在
try
块里相关问题 更多 >
编程相关推荐