Pythonはすべての文字の間にスペースを入れてテキストファイルを開きます

StackOverflow https://stackoverflow.com/questions/603115

  •  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'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top