每当我尝试使用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)

谢谢!

有帮助吗?

解决方案

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

尝试类似:

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

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

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

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

其他提示

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

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

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

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

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

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

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

好的,我是在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)

谢谢!

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

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

sed 's/ \(.\)/\1/g'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top