8

私はちょうど言うテキストファイルを持っています

text1 text2 text text
text text text text

最初にファイル内の文字列の数 (すべてスペースで区切られている) を数えてから、最初の 2 つのテキストを出力しようとしています。(テキスト 1 テキスト 2)

何か案は?

助けてくれてありがとう

編集:これは私がこれまでに持っているものです:

>>> f=open('test.txt')
>>> for line in f:
    print line
text1 text2 text text text text hello
>>> words=line.split()
>>> words
['\xef\xbb\xbftext1', 'text2', 'text', 'text', 'text', 'text', 'hello']
>>> len(words)
7
if len(words) > 2:
    print "there are more than 2 words"

私が抱えている最初の問題は、私のテキストファイルは次のとおりです。 text1 text2 text text text

しかし、単語の出力を取得すると、次のようになります: ['\xef\xbb\xbftext1', 'text2', 'text', 'text', 'text', 'text', 'hello']

「\xef\xbb\xbf」はどこから来たのですか?

4

1 に答える 1

17

ファイルを 1 行ずつ読み取るには、開いているファイル オブジェクトをforループします。

for line in open(filename):
    # do something with line

行を空白で分割して単語のリストにするには、次のようにしますstr.split()

words = line.split()

Python リスト内の項目数をカウントするには、次を使用しますlen(yourlist)

count = len(words)

Python リストから最初の 2 つの項目を選択するには、スライスを使用します。

firsttwo = words[:2]

完全なプログラムの作成はあなたに任せますが、上記のものと、if2 つの単語が既にあるかどうかを確認するためのステートメント以外は必要ありません。

ファイルの先頭にある 3 つの余分なバイトは、UTF-8 BOM (バイト オーダー マーク) です。ファイルを UTF-8 エンコードとしてマークしますが、冗長であり、実際には Windows でのみ使用されます。

次の方法で削除できます。

import codecs
if line.startswith(codecs.BOM_UTF8):
    line = line[3:]

そのエンコーディングを使用して、文字列を Unicode にデコードすることができます。

line = line.decode('utf-8')

次を使用してファイルを開くこともできますcodecs.open()

file = codecs.open(filename, encoding='utf-8')

は BOM を削除しないcodecs.open()ことに注意してください。これを行う最も簡単な方法は、次を使用することです。.lstrip()

import codecs
BOM = codecs.BOM_UTF8.decode('utf8')
with codecs.open(filename, encoding='utf-8') as f:
    for line in f:
        line = line.lstrip(BOM)
于 2012-09-24T08:13:20.253 に答える