1

私はこれを理解しようとして過去2時間を費やしました。過去 2 時間 Google を試してみました。運がない。私は何を間違っていますか?

code.txt の内容:

TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;

myscript.py

import re
from sqlalchemy import *

string = open("codes.txt").readlines()

for item in string:
    set = [item.split(";")]
    print "success"

「成功」を一度だけ出力するのはなぜですか? 私は、codes.txt の項目数に対して成功を出力することを期待しています。

4

5 に答える 5

5

readlines()は実際に改行文字を探していますが、文字列に改行文字が含まれていないように見えるため、1行しか読み取っていないため、1つの要素のみが返されます(これは@kayZhuが言ったことです、お詫びします:))。セミコロンで分割しようとしていると思うので、これを試すことができます:

In [19]: with open('codes.txt', 'r') as f:
   ....:     contents = f.read().split(';')
   ....:
   ....:

In [20]: contents
Out[20]:
['TKF6J-KXP6V-F499V-Q9XPC-7J6TZ',
 'J9YCV-D4TH6-WWWWV-F2RM7-F63XZ',
 'GXKCC-QDT34-3JRY4-TWKHX-R763Z',
 '']

そして、反復は期待どおりに機能するはずです。また、変数にPythonの組み込み名を使用しないようにしてください(たとえばstring、将来的には心痛を引き起こすだけです:))。

于 2012-11-02T06:55:43.317 に答える
3

readlines\n行をリストに分割するために改行文字に依存します。あなたの場合、codes.txt の内容は 1 行だけなので、リスト全体stringには 1 つの要素しか含まれていません。

于 2012-11-02T06:49:45.730 に答える
1

これを自問してください:item最初の反復で何を期待しますか?二番目?など。次にこれを行います。

for item in string:
    print item

そして、それがあなたの期待とどのように比較されるかを見てください。

の結果には、ファイル内のすべてのopen("codes.txt").readlines()に1つの要素が含まれます(名前に関連付ける可能性のあるより深い意味はわかりません)。現在、ファイルには1行しかありません。別の行を追加すると、次のようになります。item

TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;
TKF6J-KXP6V-F499V-Q9XPC-7J6TZ;J9YCV-D4TH6-WWWWV-F2RM7-F63XZ;GXKCC-QDT34-3JRY4-TWKHX-R763Z;

(つまり、現在の行を2倍にします)、2回印刷されることがわかります。

于 2012-11-02T06:56:58.293 に答える
0

これを試して。

string = open("code.txt").readlines()

string= "".join(string)

for item in string.split(";"):

    if len(item)>1:

        print "success"
于 2012-11-02T07:15:56.300 に答える