2013-07-02 11 views
0

Я разделяю отдельный файл журнала с вкладкой и записываю его в другой файл. Для агента (line.split ('\ t') [9]) Я хочу поставить двойные кавычки ("") для начала и конца. Вот как я это сделал двумя способами. Но в выходном файле конечная цитата печатается в начале следующей строки. Я пробовал разные вещи, но до сих пор не получил ожидаемого результата. Надеюсь, ты поймешь мой вопрос?напечатать символ в конце строки-Python

#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

Ваш 'line', вероятно, содержит символ новой строки (' \ n') в конце, что вы не содранной. Следовательно, он включен как один из символов, которые вы «присоединяетесь». – Evert

ответ

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) 
+0

В нем говорится: «Я хочу поставить двойные кавычки (« ») для начала и конца», так что это означает, что двойные кавычки должны быть частью строки. – Evert

+0

@Evert Ах, я вижу – TerryA

+0

@Haidro: Я пробовал это ...... agent = (line.split ('\ t') [9]) Он просто печатает строку без кавычек? –

0

Это не может ответить на ваш вопрос прямо, но вы рассматривали использование Python форматирования строк? Либо %, либо новый способ .format облегчат чтение и изменение вашего формата.

Было бы что-то вроде

"%s - %s %s %s %s" % (ip, time, method, status, agent) 
Смежные вопросы