在 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
模块包含执行此操作的函数。
我已经尝试了一些方法,但是当我打印 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
模块包含执行此操作的函数。