Python 3 decode("utf-8") 在应该只有空格的地方添加换行符。我要停止吗?
Python 3 decode("utf-8") is adding newlines where there should only be spaces. I do I stop this?
我正在尝试从另一个程序的输出中读取一些数据。我知道我可以打开文件并读取它们但是为了这个问题的目的我创建了示例文件 testdata.txt 如下所示:
cat testdata.txt
my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
在我的代码中,我尝试使用 subprocess.check_output 进行系统调用并将输出读入变量。但是,当我在没有 decode("utf-8") 的情况下以字节形式执行时。因此,为了将它转换为字符串,我使用了 decode("utf-8) 但是它会在有空格的地方添加新行。
output = subprocess.check_output(('cat', 'testdata.txt'), shell=False).decode('utf-8')
pprint.pprint((output))
当我执行这段代码时,我得到了这些新行。
('my.local\Sho '
'Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n')
我试图让代码看起来像这样:
('my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n')
那是 'pprint' 做的。看看这个小测试代码。是的,您可以告诉 pprint 在哪里换行,例如 pprint(test, width=300)
.
代码:
from pprint import pprint
test=r"""my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::"""
print(test)
pprint(test)
输出:
my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
('my.local\Sho '
'Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::')
我正在尝试从另一个程序的输出中读取一些数据。我知道我可以打开文件并读取它们但是为了这个问题的目的我创建了示例文件 testdata.txt 如下所示:
cat testdata.txt
my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
在我的代码中,我尝试使用 subprocess.check_output 进行系统调用并将输出读入变量。但是,当我在没有 decode("utf-8") 的情况下以字节形式执行时。因此,为了将它转换为字符串,我使用了 decode("utf-8) 但是它会在有空格的地方添加新行。
output = subprocess.check_output(('cat', 'testdata.txt'), shell=False).decode('utf-8')
pprint.pprint((output))
当我执行这段代码时,我得到了这些新行。
('my.local\Sho '
'Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n')
我试图让代码看起来像这样:
('my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n')
那是 'pprint' 做的。看看这个小测试代码。是的,您可以告诉 pprint 在哪里换行,例如 pprint(test, width=300)
.
代码:
from pprint import pprint
test=r"""my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::"""
print(test)
pprint(test)
输出:
my.local\Sho Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
my.local\Sho Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::
('my.local\Sho '
'Admin:13951:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Help:13952:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Production:13953:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::\n'
'my.local\Sho '
'Test:13954:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx:::')