1

プログラムを書いていてpython、テキスト ファイルに存在し、改行文字で区切られた 2 つの文字列を比較したいと考えています。ファイルを読み込んで、各文字列を異なる変数に設定するにはどうすればよいですか。つまりstring1string2

今私は使用しています:

file = open("text.txt").read();

しかし、これにより、文字列だけでなく、追加のコンテンツが得られます。何が返されているのかわかりませんが、このテキスト ファイルには 2 つの文字列しか含まれていません。などの他の方法を使用してみまし..read().splitlines()たが、探している結果が得られませんでした。私はpythonが初めてなので、助けていただければ幸いです!

4

3 に答える 3

2

これは最初の 2 行のみを読み取り、最後に改行文字を取り除き、それらを 2 つの個別の変数に格納します。最初の 2 つの文字列を取得するためだけにファイル全体を読み取るわけではありません。

with open('text.txt') as f:
    word1 = f.readline().strip()
    word2 = f.readline().strip()

print word1, word2

# now you can compare word1 and word2 if you like

text.txt:

foo
bar
asdijaiojsd
asdiaooiasd

出力:

foo bar

編集:任意の数の改行または空白で機能させるには:

with open('text.txt') as f:
    # sequence of all words in all lines
    words = (word for line in f for word in line.split())
    # consume the first 2 items from the words sequence
    word1 = next(words)
    word2 = next(words)

のさまざまな「クリーンでない」コンテンツで確実に動作することを確認しましたtext.txt

注: 必要以上の量のデータを読み取らないように、遅延リストのようなジェネレーター式を使用しています。それ以外の点では、ジェネレーター式はリスト内包表記と同等ですが、シーケンス内のアイテムを遅延して生成する点、つまり要求された分だけ生成する点が異なります。

于 2013-10-07T13:14:27.950 に答える
0

何が返されているのかわかりませんが、このテキスト ファイルには 2 つの文字列しか含まれていません。

問題は空白文字に関連している可能性があります (最も一般的なのは、キャリッジ リターン、改行/改行、スペース、およびタブです)。そのため、あなたstring1を ' expectedvalue' と比較しようとして失敗した場合は、改行自体が原因である可能性があります。

これを試してみてください: 各文字列の長さを出力してから、各文字列の実際の各バイトを出力して、比較が失敗する理由を確認してください。

例えば:

>>> print len(string1), len(expected)
4 3
>>> for got_character, expected_character in zip(string1, expected):
...     print 'got "{}" ({}), but expected "{}" ({})'.format(got_character, ord(got_character), expected_character, ord(expected_character))
... 
got " " (32), but expected "f" (102)
got "f" (102), but expected "o" (111)
got "o" (111), but expected "o" (111)

それが問題である場合はstrip、先頭と末尾の空白を削除してから比較を実行する必要があります。

>>> string1 = string1.strip()
>>> string1 == expected
True

Unix ライクなシステムを使用している場合は、ファイルのより詳細な表現をダンプするために、xxdまたはバイナリを使用できる可能性があります。odWindows を使用している場合は、さまざまな「16 進エディター」プログラムをダウンロードして、同じことを行うことができます。

于 2013-10-07T13:30:08.117 に答える
0
with open('text.txt') as f:
    lines = [line.strip() for line in f]
    print lines[0] == lines[1]
于 2013-10-07T13:18:22.587 に答える