我这里有一个简单的代码,应该在文本文件中输出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打开文本文件时,结果是两列数字,它们之间有一个标签,正如我们所期望的那样。
我真的迷失在这里。到底是怎么回事 ?我不能用标准记事本打开文本文件吗?
感谢您的帮助。
答案 0 :(得分:3)
我认为这是记事本的错误。
记事本在ASCII格式下将文件中的数据解释为Unicode。
前两个字符为1
和tab
,其ascii十六进制值为31
和09
如果记事本错误地将文件用于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)
不同的编辑器可能会采用不同的字符编码。这可以解释为什么有些编辑会正确显示结果。