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

时间:2012-06-13 13:43:19

标签: python text notepad python-2.4

我这里有一个简单的代码,应该在文本文件中输出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打开文本文件时,结果是两列数字,它们之间有一个标签,正如我们所期望的那样。

我真的迷失在这里。到底是怎么回事 ?我不能用标准记事本打开文本文件吗?

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

我认为这是记事本的错误。

记事本在ASCII格式下将文件中的数据解释为Unicode。 前两个字符为1tab,其ascii十六进制值为3109 如果记事本错误地将文件用于Unicode,它会将两个值读作一个3109并显示一个匹配的字符: http://www.unicodemap.org/details/0x0931/index.html(您可以看到这与字符串中的第一个字符匹配“奇怪的人物”。)

这是一个众所周知的记事本错误,甚至在维基百科上有自己幽默的标题页面:http://en.wikipedia.org/wiki/Bush_hid_the_facts

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

答案 1 :(得分:1)

我没有这个问题,您使用的是哪个版本的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=[]

答案 2 :(得分:0)

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