每当我尝试使用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)
谢谢!
答案 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'