Как убрать запятую с конца строки в Python? - PullRequest
3 голосов
/ 05 мая 2010

Как мне убрать запятую с конца строки? Я пытался

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'

Ответы [ 5 ]

7 голосов
/ 05 мая 2010

Э-э, как насчет почтенного:

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 не имеет a $11:

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

но ваш может отличаться.

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

6 голосов
/ 05 мая 2010

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

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 в виде строки.

2 голосов
/ 05 мая 2010

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

str = '1234,,,'
str = str.rstrip(',')
1 голос
/ 05 мая 2010

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

0 голосов
/ 05 мая 2010

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

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

избавляет вас от необходимости проверять длину строк и вычислять индексы срезов.

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

a_string.strip().rstrip(',')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...