使用open打印Python 3中的特定字段
我有以下代码:使用open打印Python 3中的特定字段,python,Python,我有以下代码: with open('/home/adiel/log', 'r') as list: content = list.read() rows = content.split("\n") for row in rows: infos = row.split(' ') print(infos) 返回以下值: ['2', '064328796150', 'eni-4bad5a20', '172.18.0.124', '172.18
with open('/home/adiel/log', 'r') as list:
content = list.read()
rows = content.split("\n")
for row in rows:
infos = row.split(' ')
print(infos)
返回以下值:
['2', '064328796150', 'eni-4bad5a20', '172.18.0.124', '172.18.0.5', '3306', '39064', '6', '14', '4123', '1504618064', '1504618121', 'ACCEPT', 'OK']
['2', '064328796150', 'eni-4bad5a20', '172.18.0.124', '172.18.0.5', '3306', '62717', '6', '16', '5981', '1504618064', '1504618121', 'ACCEPT', 'OK']
['2', '064328796150', 'eni-4bad5a20', '172.18.0.5', '172.18.0.124', '52909', '3306', '6', '37', '7112', '1504618064', '1504618121', 'ACCEPT', 'OK']
例如,我只想从字段1和4中获取值。如何实现它?因为python是0索引的:
row = row.split(' ')
infos = row[0], row[3]
但您可能还必须将信息存储到列表中,以便以后访问可以提供一个优雅的解决方案:
from operator import itemgetter
ig = itemgetter(0,3)
with open('/home/adiel/log', 'r') as list:
content = list.read()
rows = content.split("\n")
for row in rows:
infos = row.split(' ')
relevant_infos=ig(infos)
print(relevant_infos)
您可以使用列表理解来执行以下操作:
with open('/home/adiel/log', 'r') as f:
print([[x.split()[0], x.split()[3]] for x in f])
或者,如果要单独打印每一行:
with open('/home/adiel/log', 'r') as f:
for line in [[x.split()[0], x.split()[3]] for x in f]:
print(line)
好主意,不过你没有使用itemgettercorrectly@JBernardo想详细说明一下这里到底出了什么问题吗?你有没有尝试过代码?提示:ig(0,3),应该是ig(the_list)@JBernardo yikes!我创建了一个列表来处理itemgetter
,然后在将其转换回OP的问题时,我把答案弄糟了。感谢您的关注并指出这一点!(编辑并修复)这很好,但我在结果结束时遇到了这个错误:Traceback(最近一次调用):File“/home/adiel/print log itemgetter.py”,第9行,在相关的_infos=ig(infos)indexer:list index超出范围注意,您可能不想说“as list”,因为“list”是Python内置的()这一点让它大吃一惊。“as list_file”可能更清晰。好吧,这个例子很好用!谢谢你,还有其他人。很高兴能帮上忙:-)关于这个代码的另一个疑问,我现在不知道如果我把它放在这里会是最好的方式,所以我打开了另一个话题:@Adiel我回答了你的另一个问题