输出到终端和输出到文件得到不同的结果

  • 本文关键字:输出 结果 文件 终端 python
  • 更新时间 :
  • 英文 :


我认为这是一个编码问题,但基本上我有一个python脚本打开一个文件,抓取一些行,然后输出到一个新文件。当我把结果输出到终端时,它们是我所期望的,但当我把它输出到一个文件时,它是作为一些编码的文本/字节?

with open("output_changed2.txt") as f:
content = f.readlines()
for i in range(1, len(content)+1):

if i % 2 == 0: 
print(content[i].strip() +'|'+ content[i+2].strip())`

来自output_changed2 的样本字符串

|2009 | 2 | John Frizzell | Carrie的怀疑

0|Carrie的怀疑|John Frizzell |0|信鸽的变形和之后的美味大餐|怀疑培养信心||

在终端中,此打印为|2009|2|John Frizzell|Carrie的怀疑0|Carrie的怀疑|John Frizzell |0|信鸽的变形和之后的美味大餐|怀疑培养信心||

在输出文件中,使用另一个打开的文件进行写入,或者像myscript>gt;myfile.txt给出了三角形/问号符号。我试着打开一个临时文件并写入其中,但结果是一样的。

我试图在我的终端中获得它,这样我就可以将数据导入excel表

感谢任何帮助,提前感谢:(

您的代码不会显示如何写入文件。我想你会做一些类似的事情:

with open("output_changed2.txt") as f, open("output.txt", "wt") as output_file:
# I added this part              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
content = f.readlines()
for i in range(1, len(content) -2):
if i % 2 == 0:
print(content[i].strip() + '|' + content[i + 2].strip())
output_file.write(content[i].strip() + '|' + content[i + 2].strip())
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ writing to the file

我为output_changed2.txt创建了此内容,因为您没有提供您的内容:

something something something
something something something
|2009|2|John Frizzell|Carrie's Suspicion
something something something
0|Carrie's Suspicion|John Frizzell|0|Defloration Of A Carrier Pigeon And The Lovely Meal It Was Afterwards|Suspicion Breeds Confidence||
something something something
something something something

它在stdout上产生以下输出:

|2009|2|John Frizzell|Carrie's Suspicion|0|Carrie's Suspicion|John Frizzell|0|Defloration Of A Carrier Pigeon And The Lovely Meal It Was Afterwards|Suspicion Breeds Confidence||
0|Carrie's Suspicion|John Frizzell|0|Defloration Of A Carrier Pigeon And The Lovely Meal It Was Afterwards|Suspicion Breeds Confidence|||something something something

同样的事情,但在output.txt文件中只有一行:

|2009|2|John Frizzell|Carrie's Suspicion|0|Carrie's Suspicion|John Frizzell|0|Defloration Of A Carrier Pigeon And The Lovely Meal It Was Afterwards|Suspicion Breeds Confidence||0|Carrie's Suspicion|John Frizzell|0|Defloration Of A Carrier Pigeon And The Lovely Meal It Was Afterwards|Suspicion Breeds Confidence|||something something something

这是因为print有一个默认参数end='n',所以除非另有说明,否则它会在每次调用后自动添加一条换行符。但write只是准确地写出它所给出的内容。

我认为你观察到的差异来自于此。

此外,您的循环将为IndexError: list index out of range,因为在内部您访问content[i + 2],但您迭代for i in range(1, len(content)+1),因此在某一点上,您的i将变为len(content),因此i+2是越界的。

最新更新