微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在python3脚本中从文件读取变量时无法摆脱尾随\n

如何解决在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 举报,一经查实,本站将立刻删除。