Python 写出文本文件时出现奇怪的字符

问题描述 投票:4回答:3

我在这边有一个简单的代码,应该在文本文件中输出2列字符。

infile = open('anything.txt', 'r')
outfile = open('some.txt', 'w')
f = infile.readlines()
data=[]
a=['1','2','3']
b=['5','6','7']
for i in a:
  for j in b:
    outfile.write(i + "\t" + j + "\n")

当我用标准的记事本打开结果的文本文件时,得到的是这些奇怪的字符!

然而,当我用Notepad++或Wordpad打开文本文件时,结果是两列数字之间有一个Tab,正如我们所期望的那样。

我真的很困惑。这到底是怎么回事?我不能用标准的记事本打开文本文件吗?

谢谢你的帮助。

python text notepad python-2.4
3个回答
3
投票

我相信这是记事本的一个错误。

Notepad将文件中的数据解释为Unicode,而它是ASCII码。1tab 它们的ascii十六进制值是 3109如果记事本将文件误认为是Unicode,它将把这两个值读成一个。3109 并显示一个字符来匹配。 http:/www.unicodemap.orgdetails0x0931index.html (你可以看到,这与你的 "奇怪的字符 "字符串中的第一个字符相匹配。)

这是记事本的一个众所周知的错误,甚至在维基百科上有自己幽默的标题页。http:/en.wikipedia.orgwikiBush_hid_thefacts(隐藏的事实)

你可以在记事本中选择字符编码,通过在编码下拉中选择它来强制以正确的编码打开文件(本例中为ANSI)。但如果你想在文本文件中看到数据的正确值,可能最好使用其他文本编辑器。


2
投票

我没有这个问题,你用的是什么版本的Python,什么操作系统?

你应该在完成后明确地关闭你的文件。

infile.close()
infile.close()

最好考虑使用 with 因为它将在您完成工作或遇到异常时 "自动 "关闭您的文件。

with open('data.txt') as infile, open('some.txt', 'w') as outfile:

对于早期版本的 Python (2.7 之前?),您可能需要将其分解为两个部分。

with open('data.txt') as infile:  # default mode is "read" if not specified
  with open('some.txt', 'w') as outfile:

(鉴于您提到您使用的是 Python v2.4) with 不会对您有用,它是在 v2.5 中引入的 - 了解它还是很好的)

我得到这样的输出。

1   5
1   6
1   7
2   5
2   6
2   7
3   5
3   6
3   7

另外,请注意你是 在你的程序中根本不使用这三行字。

infile = open('anything.txt', 'r')
f = infile.readlines()
data=[]

0
投票

不同的编辑器可能会假设不同的字符编码。这可以解释为什么有些编辑器会正确显示结果。

© www.soinside.com 2019 - 2024. All rights reserved.