Pythonはすべての文字の間にスペースを入れてテキストファイルを開きます
-
03-07-2019 - |
質問
pythonコマンドで.csvファイルを開こうとするたびに
fread = open( 'input.csv'、 'r')
常にすべての文字の間にスペースを入れてファイルを開きます。同じコマンドで他のテキストファイルを開くことができ、それらが正しく読み込まれるため、テキストファイルに何か問題があると推測しています。誰でもテキストファイルがPythonでこのように読み込まれる理由を知っていますか?
ありがとう。
更新
OK、ジャレット・ハーディの投稿の助けを借りてそれを得た
これは、ファイルを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に変換することはお勧めしません。
編集:ファイルをアップロードしていただきありがとうございます。ファイルの先頭に2バイトがあり、実際にワイド文字セットを使用していることを示しています。好奇心が強い場合は、一部の人が示唆しているように、16進エディターでファイルを開いてください。 (等)。ドットは各文字の追加バイトです。
上記のコードスニペットは、そのファイルを使用する私のマシンで動作するようです。
他のヒント
ファイルは何らかのUnicodeエンコードでエンコードされていますが、asciiとして読み取っています。 Pythonで使用する前に、ファイルをasciiに変換してみてください。
値がカンマで区切られた単純なtxtファイルではありません。 ファイルが正しく形成されているかどうかを確認するには、テキストエディタで開いてみてください。
エンコードされたファイルを読み取るには、 open
を codecs.open
に置き換えるだけです。
fread = codecs.open('input.csv', 'r', 'utf-16')
私には決して発生しませんでしたが、truppoが言ったように、ファイルに何か問題があるに違いありません。
Excel / BrOffice Calcでファイルを開いて、ファイルをCsvとして再度保存してみてください。
問題が解決しない場合は、ファイルの最初の10行/最後の10行/中間10行のデータのサブセットを試してください。
OK、ジャレット・ハーディの投稿の助けを借りてそれを得た
これは、ファイルを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'