使用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我回答了你的另一个问题