我正在拆分制表符分隔的日志文件并将其写入另一个文件。对于代理(line.split('\ t')[9])我想为开头和结尾添加双引号(“”)。以下是我用两种方法做到的方法。但是在输出文件中,末尾引号打印在下一行的开头。我尝试了不同的东西,但仍然没有得到预期的结果。希望你理解我的问题?
#method 01
agent = '"'+(line.split('\t')[9])+'"'
#method 02
agent = ''.join(('"',line.split('\t')[9],'"'))
fo.write(ip + ' ' + '-' + ' ' + '-' + ' ' + time +' ' + method + ' ' + status + ' ' + '0' + ' ' + referrer + ' ' + agent)
输出
120.151.224.62 - - [26/Nov/2012:23:59:59 -0600] "GET /comworks/default.asp" 200 0 "" "Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Trident/5.0)
"101.2.186.21 - - [27/Nov/2012:00:00:01 -0600] "GET /online/2/2/22002.aspx" 200 0 "https://www.example.com/online/2/2/22001.aspx" "Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.11+(KHTML,+like+Gecko)+Chrome/23.0.1271.64+Safari/537.11
"101.2.186.21 - - [27/Nov/2012:00:00:01 -0600] "GET /online/Handlers/ImageHandler.ashx" 200 0 "https://www.exsample.com/online/2/2/22002.aspx" "Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.11+(KHTML,+like+Gecko)+Chrome/23.0.1271.64+Safari/537.11
预期输出
120.151.224.62 - - [26/Nov/2012:23:59:59 -0600] "GET /comworks/default.asp" 200 0 "" "Mozilla/5.0+(compatible;+MSIE+9.0;+Windows+NT+6.1;+Trident/5.0)"
101.2.186.21 - - [27/Nov/2012:00:00:01 -0600] "GET /online/2/2/22002.aspx" 200 0 "https://www.exsample.com/online/2/2/22001.aspx" "Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.11+(KHTML,+like+Gecko)+Chrome/23.0.1271.64+Safari/537.11"
101.2.186.21 - - [27/Nov/2012:00:00:01 -0600] "GET /online/Handlers/ImageHandler.ashx" 200 0 "https://www.exsample.com/online/2/2/22002.aspx" "Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.11+(KHTML,+like+Gecko)+Chrome/23.0.1271.64+Safari/537.11"
行
101.2.186.21 2012-11-27 00:00:01 GET /online/2/2/22002.aspx 200 https://www.exsample.com/online/2/2/22001.aspx Mozilla/5.0+(Windows+NT+6.1)+AppleWebKit/537.11+(KHTML,+like+Gecko)+Chrome/23.0.1271.64+Safari/537.11
答案 0 :(得分:2)
你的线路在拆分时,不可能有一个指数上升到9(他们不是我的)。但无论如何,看起来你的行被新行('\n'
)分隔,所以当你访问列表中的最后一个元素时,你也会访问新行。
你可以这样做:
agent = '"'+(line.split('\t')[9]).rstrip('\r\n')+'"'
此外,您的最后一行并不需要所有连接。您可以将其简化为:
fo.write(ip + ' - - ' + time + ' ' + method + ' ' + status + ' 0 ' + referrer + ' ' + agent)
甚至:
fo.write("{0} - - {1} {2} {3} {4} 0 {5} {6}".format(ip, time, method, status, referrer, agent)
答案 1 :(得分:0)
这可能无法直接回答您的问题,但您是否考虑过使用Python字符串格式? %
或新的.format
方式可以使您的格式更易于阅读和修改。
这就像是
"%s - %s %s %s %s" % (ip, time, method, status, agent)