如何从Python中删除字符串末尾的逗号?

时间:2010-05-05 15:25:42

标签: python string

如何从字符串末尾删除逗号?我试过了

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 个答案:

答案 0 :(得分:7)

呃,这个古老的人怎么样:

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 <{1}}

$11

但你的可能会有所不同。

但是,我们需要查看脚本的输出。

答案 1 :(得分:6)

当你说

awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE)
awk_stdout = awk.communicate(uptime_stdout)[0]
然后将awk进程的输出打印到stdout(例如终端)。 awk_stdout设置为Noneawk_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]

然后没有任何内容打印到stdout(例如终端),awk_stdoutawk命令的输出作为字符串。

答案 2 :(得分:2)

删除字符串末尾的所有逗号:

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

答案 3 :(得分:1)

我认为您会发现awk_stdin实际上以换行符结束(print repr(awk_stdin)以清楚地显示),因此您需要先删除 rstrip'ping逗号(或者,你可以同时使用RE做两个,但基本的想法是逗号不是实际上是该字符串中的最后一个字符! - 。)。

答案 4 :(得分:0)

如果您有空格/非打印字符,请尝试以下方法:

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

省去了检查字符串长度和计算切片索引的麻烦。

当然,如果您不需要为不以逗号结尾的字符串做任何不同的事情,那么您可以这样做:

a_string.strip().rstrip(',')