我在这边有一个简单的代码,应该在文本文件中输出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,正如我们所期望的那样。
我真的很困惑。这到底是怎么回事?我不能用标准的记事本打开文本文件吗?
谢谢你的帮助。
我相信这是记事本的一个错误。
Notepad将文件中的数据解释为Unicode,而它是ASCII码。1
和 tab
它们的ascii十六进制值是 31
和 09
如果记事本将文件误认为是Unicode,它将把这两个值读成一个。3109
并显示一个字符来匹配。ऱ
http:/www.unicodemap.orgdetails0x0931index.html (你可以看到,这与你的 "奇怪的字符 "字符串中的第一个字符相匹配。)
这是记事本的一个众所周知的错误,甚至在维基百科上有自己幽默的标题页。http:/en.wikipedia.orgwikiBush_hid_thefacts(隐藏的事实)
你可以在记事本中选择字符编码,通过在编码下拉中选择它来强制以正确的编码打开文件(本例中为ANSI)。但如果你想在文本文件中看到数据的正确值,可能最好使用其他文本编辑器。
我没有这个问题,你用的是什么版本的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=[]
不同的编辑器可能会假设不同的字符编码。这可以解释为什么有些编辑器会正确显示结果。