55

私は自分を開いてfile.txt、このファイルからすべてのデータを分割したいと考えています。

これが私のものfile.txtです:

some_data1 some_data2 some_data3 some_data4 some_data5

ここに私のpythonコードがあります:

>>>file_txt = open("file.txt", 'r')
>>>data = file_txt.read()
>>>data_list = data.split(' ')
>>>print data
some_data1 some_data2 some_data3 some_data4 some_data5
>>>print data_list
['\xef\xbb\xbfsome_data1', 'some_data1', "some_data1", 'some_data1', 'some_data1\n']

ここでわかるように、 my を印刷すると、リストに this:と this:data_listが追加されます。これらとは何ですか。リストを削除するにはどうすればよいですか。\xef\xbb\xbf\n

ありがとう。

4

3 に答える 3

13

\xef\xbb\xbfはUTF-8のバイト オーダー マークです。は次の 2 文字が文字コードを表す 16 進シーケンスであることを示す\x エスケープ シーケンスです。

\n改行文字です。これを削除するには、 を使用できますrstrip()

data.rstrip()
data_list = data.split(' ')

バイト オーダー マークを削除するには、io.open(2.6 または 2.7 を使用していると仮定して)utf-8モードでファイルを開くことができます。は Python で実装されているため、少し遅くなる可能性があることに注意してください。Python の速度または古いバージョンが必要な場合は、codecs.open.

次のようなことを試してください:

import io

# Make sure we don't lose the list when we close the file
data_list = []

# Use `with` to ensure the file gets cleaned up properly
with io.open('file.txt', 'r', encoding='utf-8') as file:
    data = file.read() # Be careful when using read() with big files
    data.rstrip() # Chomp the newline character
    data_list = data.split(' ')

print data_list
于 2013-09-06T19:01:55.617 に答える
10

他の人が述べたように、最初に UTF-8 BOM を含むファイルを扱っています。

それらはすべて、それに対処する方法または直接削除する方法を教えてくれます。

しかし、たまたま 1 つの静的ファイル (またはそれらの小さな静的セット) だけで作業する必要がある場合は、BOM を完全に積極的に削除して、BOM を処理する必要がないようにすることをお勧めします。

実際のところ、ほとんどのテキスト エディターではエンコーディングを別のエンコーディングに変換でき、UTF-8 と BOM 付きの UTF-8 が別々にリストされている場合があります。

最初に頭に浮かぶのは (たくさんありますが) Notepad++ です。Encoding > Convert to UTF-8 without BOM に移動し、ファイルを保存すれば完了です。

于 2015-06-19T08:57:25.757 に答える