21

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

谢谢!

4

8 回答 8

21

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

尝试类似:

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

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

编辑:感谢您上传文件。文件前面有两个字节,表明它确实使用了宽字符集。如果你很好奇,可以按照一些人的建议在十六进制编辑器中打开文件……你会在文本版本中看到一些东西,比如“ID|”。(ETC)。点是每个字符的额外字节。

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

于 2009-03-02T17:36:55.253 回答
7

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

于 2009-03-02T17:22:06.723 回答
1

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

于 2009-03-02T17:18:54.703 回答
1

要读取编码文件,您可以简单地替换opencodecs.open.

fread = codecs.open('input.csv', 'r', 'utf-16')
于 2009-05-17T09:39:21.857 回答
0

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

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

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

于 2009-03-02T17:15:28.267 回答
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)

谢谢!

于 2009-03-02T17:54:02.560 回答
0

以二进制模式“rb”打开文件。在 HEX 编辑器中检查它并检查空填充“00”。在类似 Scintilla 文本编辑器中打开文件以检查文件中存在的字符。

于 2009-03-02T17:55:56.830 回答
0

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

sed 's/ \(.\)/\1/g'
于 2012-05-22T18:48:31.323 回答