2010-05-05 2 views
3

Как удалить запятую из конца строки? Я попыталсяКак удалить запятую из конца строки в Python?

awk = subprocess.Popen([r"awk", "{print $10}"], stdin=subprocess.PIPE) 
awk_stdin = awk.communicate(uptime_stdout)[0] 
print awk_stdin 
temp = awk_stdin 
t = temp.strip(",") 

также попытался t = temp.rstrip(","), оба не работают.


Это код:

uptime = subprocess.Popen([r"uptime"], stdout=subprocess.PIPE) 
uptime_stdout = uptime.communicate()[0] 
print uptime_stdout 

awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE) 
awk_stdin = awk.communicate(uptime_stdout)[0] 
print repr(awk_stdin) 
temp = awk_stdin 
tem = temp.rstrip("\n") 
logfile = open('/usr/src/python/uptime.log', 'a') 
logfile.write(tem + "\n") 
logfile.close() 

Это выход:

17:07:32 up 27 days, 37 min, 2 users, load average: 5.23, 5.09, 4.79 

5.23, 
None 
Traceback (most recent call last): 
    File "uptime.py", line 21, in ? 
    tem = temp.rstrip("\n") 
AttributeError: 'NoneType' object has no attribute 'rstrip' 
+0

Вы уверены, что есть только '' 's в конце Струна? – kennytm

+0

Не могли бы вы показать нам, что такое 'temp'? – SilentGhost

+2

Моя первая догадка заключается в том, что строка не заканчивается запятой, а скорее как конечная новая строка. Не могли бы вы разместить EXACT-выход awk? –

ответ

7

Когда говорят

awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE) 
awk_stdout = awk.communicate(uptime_stdout)[0] 

то на выходе процесса AWK печатается на стандартный вывод (например, терминал). awk_stdout установлен в None. awk_stdout.rstrip('\n') вызывает AttributeError, потому что None не имеет атрибута rstrip.

Когда вы говорите

awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE, 
         stdout=subprocess.PIPE) 
awk_stdout = awk.communicate(uptime_stdout)[0] 

, то ничего не выводится на стандартный вывод (например, терминал), и awk_stdout получает вывод команды awk в виде строки.

+0

+1, и все это в документах кстати. – SilentGhost

+0

cool, that working, awk = subprocess.Popen ([r "awk", "{print $ 11}"], stdin = subprocess.PIPE, stdout = subprocess.PIPE) – krisdigitx

+0

@kris, я предлагаю вам принять этот ответ, затем , +1 для ловли его, ~ unutbu. – paxdiablo

7

Err, как о почтенный:

if len(str) > 0: 
    if str[-1:] == ",": 
     str = str[:-1] 

С другой стороны, rstrip сам должен работать нормально, поэтому есть что-то о строке, которую вы получаете от awk, что не совсем то, что вы ожидаете. Нам нужно это увидеть.


Я подозреваю, что это потому, что ваша строка не фактически конца с запятой. При запуске:

str = "hello," 
print str.rstrip(",") 

str = "hello,\n" 
print str.rstrip(",") 
print str.rstrip(",\n") 

выход:

hello 
hello, 

hello 

Другими словами, если есть символ новой строки в конце строки, а также через запятую, вам необходимо rstrip оба персонажа с ",\n".


Хорошо, основанный на ваш комментарий, вот что вы пытаетесь:

uptime = subprocess.Popen([r"uptime"], stdout=subprocess.PIPE) 
uptime_stdout = uptime.communicate()[0] 
print uptime_stdout 
awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE) 
awk_stdin = awk.communicate(uptime_stdout)[0] 
print repr(awk_stdin) 
temp = awk_stdin 
tem = temp.rstrip("\n") 
logfile = open('/usr/src/python/uptime.log', 'a') 
logfile.write(tem + "\n") 
logfile.close() 

Что вы на самом деле получать из ваших двух print заявлений и что в настоящее время добавляется в лог-файл?

Мой частности uptimeне имеют в $11:

23:43:10 up 5:10, 0 users, load average: 0.00, 0.00, 0.00 

но ваши могут быть разными.

Тем не менее, нам нужно увидеть выходные данные вашего скрипта.

+0

уверен, что вы не говорите, что встроенный метод перестает работать? – SilentGhost

+0

Нет, но информация отсутствует. Я ответил: «Как я делю запятую с конца строки?» – paxdiablo

+0

Я получаю TypeError: ошибка объекта unsubscriptable – krisdigitx

2

Удалите все запятые в конце строки:

str = '1234,,,' 
str = str.rstrip(',') 
+1

Я думаю, что вы, возможно, имели в виду 'str.rstrip (',')' –

+0

Да, я набрал слишком быстро. Исправлено редактирование. – unholysampler

1

Я думаю, вы обнаружите, что на самом деле awk_stdin заканчивается символом новой строки (print repr(awk_stdin), чтобы показать это ясно), так что вам нужно rstrip что прочь, прежде чем переписать запятую (или вы могли бы сделать оба сразу с RE, но основная идея состоит в том, что запятая не является фактически последним символом в этой строке! -).

0

Если у вас есть пробелы/не символы печати, то попробуйте что-то вроде этого:

a_string = 'abcdef,\n' 
a_string.strip().rstrip(',') if a_string.strip().endswith(',') else a_string.strip() 

спасает вас от проверки длины строки и выяснить, индексы среза.

Конечно, если вам не нужно делать что-либо другое для строк, которые не заканчиваются запятой, то вы просто можете сделать:

a_string.strip().rstrip(',') 
Смежные вопросы