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

cant get rid of trailing \n when reading variable from file in python3 script

我已经尝试了一些方法,但是当我打印 searchterm 变量时我无法摆脱 \n

1.

os.system(r"grep -R 'title' tmp2 | awk -F '\"' '{print }' > guessedtitle ")
with open("./guessedtitle", "r") as myfile2:
    search = str(myfile2.readlines())[2:-2]
    searchterm = ''.join(search.split())
print(searchterm)

这给了我以下输出:Mr Inbetween\n

2.

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)

相同的输出:Mr Inbetween\n

有人可以指导我做错了什么或者为什么我无法删除尾随的新行吗?

经过数小时的反复试验,我找到了可行的解决方案,但仍然不确定为什么 python 处理 lines/files 与 bash 如此不同。

os.system(r"grep -R 'title' tmp2 | awk -F ',' '{print }' | awk -F '\"' '{print }' > 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 }' > 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 }' > guessedtitle ")
with open("./guessedtitle", "r") as myfile2:
    searchterm = myfile2.readline().rstrip('\n')
print(searchterm)

最后,还有更好的方法从 Python 执行外部程序。 subprocess 模块包含执行此操作的函数。