python打开文本文件,每个字符之间有一个空格

时间:2009-03-02 17:09:38

标签: python csv text-files

每当我尝试使用python命令打开.csv文件时 fread = open('input.csv', 'r') 它总是打开文件,每个字符之间都有空格。我猜这是文本文件有问题,因为我可以使用相同的命令打开其他文本文件并正确加载它们。有谁知道为什么文本文件会在python中加载?

感谢。

更新

好的,我是在Jarret Hardie的帖子

的帮助下得到的

这是我用来将文件转换为ascii

的代码
fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

谢谢!

8 个答案:

答案 0 :(得分:17)

递归的帖子可能是正确的......文件的内容很可能用多字节字符集编码。事实上,如果是这种情况,您可以在python本身中读取文件,而不必先在python之外进行转换。

尝试类似:

fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')

'b'标志确保将文件读取为二进制数据。你需要知道(或猜测)原始编码...在这个例子中,我使用了utf-16,但是使用了YMMV。这会将文件转换为unicode。如果你真的有一个包含多字节字符的文件,我不建议将其转换为ascii,因为你最终可能会丢失很多字符。

编辑:感谢您上传文件。文件前面有两个字节,表示确实使用了宽字符集。如果你很好奇,请在十六进制编辑器中打开文件,因为有些人建议......你会在文本版本中看到像'I.D. |'那样的东西。 (等等)。点是每个字符的额外字节。

上面的代码段似乎可以在我的机器上使用该文件。

答案 1 :(得分:7)

该文件以某种unicode编码进行编码,但您将其视为ascii。尝试在python中使用它之前将文件转换为ascii。

答案 2 :(得分:1)

csv不是一个简单的txt文件,其值以逗号分隔。 只需尝试使用文本编辑器打开它,看看文件是否正确形成。

答案 3 :(得分:1)

要阅读已编码的文件,您只需将open替换为codecs.open

fread = codecs.open('input.csv', 'r', 'utf-16')

答案 4 :(得分:0)

它确实从未发生在我身上,但正如truppo所说,文件一定有问题。

尝试在Excel / BrOffice Calc中打开文件,再次将文件另存为Csv。

如果问题仍然存在,请尝试数据的子集:第10页/最后10页/文件的中间10行。

答案 5 :(得分:0)

好的,我是在Jarret Hardie的帖子

的帮助下得到的

这是我用来将文件转换为ascii

的代码
fread = open('input.csv', 'rb').read()
mytext = fread.decode('utf-16')
mytext = mytext.encode('ascii', 'ignore')
fwrite = open('input-ascii.csv', 'wb')
fwrite.write(mytext)

谢谢!

答案 6 :(得分:0)

以二进制模式'rb'打开文件。在HEX编辑器中检查它并检查空填充“00”。用Scintilla Text Editor打开文件,检查文件中的字符。

答案 7 :(得分:0)

这是快速简便的方法,尤其是如果python不能正确解析输入

sed 's/ \(.\)/\1/g'