如何解决在python3脚本中从文件读取变量时无法摆脱尾随\n
我已经尝试了一些东西,但是当我打印 searchterm 变量时我无法摆脱 \n
1.
Jan 29 14:57:18 raspBerrypi3 postfix/smtpd[4472]: connect from localhost[127.0.0.1]
Jan 29 14:57:18 raspBerrypi3 postfix/smtpd[4472]: B557060047: client=localhost[127.0.0.1]
Jan 29 14:57:18 raspBerrypi3 postfix/cleanup[4475]: B557060047: message-id=<20210129175718.B557060047@rpipump.dnsalias.com>
Jan 29 14:57:18 raspBerrypi3 postfix/smtpd[4472]: disconnect from localhost[127.0.0.1] ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
Jan 29 14:57:18 raspBerrypi3 postfix/qmgr[732]: B557060047: from=<xxxxx@xxxx.com>,size=491,nrcpt=1 (queue active)
Jan 29 14:57:18 raspBerrypi3 postfix/smtp[4476]: B557060047: to=<yyyyyy@gmail.com>,relay=none,delay=0.12,delays=0.05/0.07/0/0,dsn=4.4.3,status=deferred (Host or domain name not found. Name service err$
这给了我以下输出:os.system(r"grep -R 'title' tmp2 | awk -F '\"' '{print $4}' > guessedtitle ")
with open("./guessedtitle","r") as myfile2:
search = str(myfile2.readlines())[2:-2]
searchterm = ''.join(search.split())
print(searchterm)
2.
Mr Inbetween\n
with open("./guessedtitle","r") as myfile2:
search = str(myfile2.readlines())[2:-2]
searchterm = str(search.replace('\r\n'))
print(searchterm)
this also give me the following output : `Mr Inbetween\n`
相同的输出:with open("./guessedtitle","r") as myfile2:
search = str(myfile2.readlines())[2:-2]
searchterm = (search.rstrip('\r\n'))
print(searchterm)
请有人指导我我做错了什么或为什么我无法删除尾随的新行?
解决方法
经过数小时的反复试验,我找到了一个可行的解决方案,但仍然不确定为什么 python 处理行/文件与 bash 如此不同。
os.system(r"grep -R 'title' tmp2 | awk -F ',' '{print $1}' | awk -F '\"' '{print $4}' > guessedtitle")
searchterm = str(os.popen(r"cat ./guessedtitle").read().split())[2:-2]
这给出了以下输出:Mr Inbetween
您一直在以错误的方式处理此问题,即将列表转换为字符串然后尝试操作它使事情过于复杂。相反,您可以使用 rstrip()
:
>>> s = 'Mr Inbetween\n'
>>> s
'Mr Inbetween\n'
>>> s.rstrip('\n')
'Mr Inbetween'
您可以像这样处理文件的行:
os.system(r"grep -R 'title' tmp2 | awk -F '\"' '{print $4}' > guessedtitle ")
with open("./guessedtitle","r") as myfile2:
for searchterm in myfile2:
searchterm = line.rstrip('\n')
print(searchterm)
这将遍历文件中的所有行并在打印该行之前删除所有尾随的换行符。
鉴于您希望文件中只有一行,您可以使用 readline()
来读取单行。您仍然需要删除尾随的新行。
os.system(r"grep -R 'title' tmp2 | awk -F '\"' '{print $4}' > guessedtitle ")
with open("./guessedtitle","r") as myfile2:
searchterm = myfile2.readline().rstrip('\n')
print(searchterm)
最后,还有更好的方法可以从 Python 执行外部程序。 subprocess
模块包含执行此操作的函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。