-1

我正在拆分一个制表符分隔的日志文件并将其写入另一个文件。对于代理 (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
4

2 回答 2

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)
于 2013-07-02T09:51:56.367 回答
0

这可能无法直接回答您的问题,但您是否考虑过使用 Python 字符串格式?无论是采用这种方式%还是采用新.format方式,都会使您的格式更易于阅读和修改。

会是这样的

"%s - %s %s %s %s" % (ip, time, method, status, agent)
于 2013-07-02T09:55:44.570 回答