在Python中,如何从字符串末尾去掉逗号?

在Python中,如何从字符串末尾去掉逗号?,python,string,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.Pop

如何从字符串末尾去掉逗号?我试过了

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'

呃,那尊者呢:

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
换句话说,如果字符串末尾有一个换行符和一个逗号,则需要将这两个字符都用
,\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
语句中实际得到了什么,以及日志文件中附加了什么

我的特定正常运行时间
没有
$11

23:43:10 up  5:10,  0 users,  load average: 0.00, 0.00, 0.00
但你的可能不同


不过,我们需要查看脚本的输出。

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

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

我想你会发现,
awk\u stdin
实际上以一个换行符结尾(
print repr(awk\u stdin)
来清楚地显示它),所以你需要在rstrip'ping逗号之前把它去掉(或者,你可以用RE同时做这两件事,但基本思想是逗号实际上不是该字符串中的最后一个字符!)当你说

awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE)
awk_stdout = awk.communicate(uptime_stdout)[0]
awk = subprocess.Popen([r"awk", "{print $11}"], stdin=subprocess.PIPE,
                       stdout=subprocess.PIPE)
awk_stdout = awk.communicate(uptime_stdout)[0]
然后将awk过程的输出打印到标准输出(例如终端)。
awk\u stdout
设置为
None
awk\u stdout.rstrip('\n')
引发一个
AttributeError
,因为
None
没有名为
rstrip
的属性

当你说

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

然后不向标准输出(例如,终端)打印任何内容,
awk\u标准输出
awk
命令的输出作为字符串。

如果您有空白/非打印字符,请尝试以下操作:

a_string = 'abcdef,\n'
a_string.strip().rstrip(',') if a_string.strip().endswith(',') else a_string.strip()
省去了检查字符串长度和计算切片索引的麻烦

当然,如果不需要对不以逗号结尾的字符串执行任何不同的操作,则可以执行以下操作:

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

你确定字符串的末尾只有
?你能告诉我们
temp
是什么吗?我的第一个猜测是,你的字符串不是以逗号结尾,而是以尾随的换行符结尾。你能发布awk的确切输出吗?当然,你不是在暗示内置方法停止工作了吗?不,但问题中缺少信息。我回答了“如何从字符串末尾去掉逗号?”uptime=subprocess.Popen([r“uptime”),stdout=subprocess.PIPE)uptime\u stdout=uptime.communicate()[0]print uptime\u stdout awk=subprocess.Popen([r“awk”,“{print$11}]”,stdin=subprocess.PIPE)awk\u stdin=awk.communicate(uptime\u stdout)[0]print repr(awk\stdin)temp=awk\u stdin tem=temp.rstrip(“\n”)logfile=open('/usr/src/python/uptime.log','a')logfile.write(tem+“\n”)logfile.close()这就是我试图做的事情。在平均负载之后,这个值一定是
$8
,而不是
$11
-如果你想解决这个问题,你真的需要发布脚本的输出。当更多的信息几乎肯定会指出问题的时候,我们猜测可能的错误对我们没有什么好处。我想你的意思可能是
str.rstrip(',')
cool,行得通,awk=subprocess.Popen([r“awk”,{print$11}],stdin=subprocess.PIPE,stdout=subprocess.PIPE)@kris,我建议你接受这个答案+为了抓住它,~unutbu。