0

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

1.

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)

这给了我以下输出: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

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

4

2 回答 2

0

经过数小时的反复试验,我找到了一个可行的解决方案,但仍然不确定为什么 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

于 2021-01-30T03:02:38.210 回答
0

您一直在以错误的方式进行此操作,即将列表转换为字符串然后尝试操作它会使事情变得过于复杂。相反,您可以使用以下命令删除尾随的新行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)

这将遍历文件中的所有行并在打印该行之前删除所有尾随换行符。

鉴于您希望文件中只有一行,您可以使用 usereadline()来读取单行。您仍然需要删除尾随的新行。

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模块包含执行此操作的功能。

于 2021-01-30T03:57:48.003 回答