1

これは、Project Euler Problem 22の解決策の始まりです。一度に 1 つずつ名前を生成しようとしているテキスト ファイルのサンプル バージョンがあります。 これは、文字列メソッドに関するドキュメントへのリンクです。タスク用に次のコードを作成しました。

def name_gen():
    with open('C:/python/namessample.txt') as nameFile:
        nameGenerator = (i.strip('"').split(sep='","') for i in nameFile)
        for name in nameGenerator:
            yield type(name), type(nameGenerator), type(nameFile), name

for i in name_gen():
    print(i)

これはコード出力です:

(<class 'list'>, <class 'generator'>, <class '_io.TextIOWrapper'>, ['DOUGLASS', 'CORDELL', 'OSWALDO', 'ELLSWORTH', 'VIRGILIO', 'TONEY', 'NATHANAEL', 'DEL', 'BENEDICT', 'MOSE', 'JOHNSON', 'ISREAL', 'GARRET', 'FAUSTO', 'ASA', 'ARLEN', 'ZACK', 'WARNER', 'MODESTO', 'FRANCESCO', 'MANUAL', 'GAYLORD', 'GASTON', 'FILIBERTO', 'DEANGELO', 'MICHALE', 'GRANVILLE', 'WES', 'MALIK', 'ZACKARY', 'TUAN', 'ELDRIDGE', 'CRISTOPHER', 'CORTEZ', 'ANTIONE', 'MALCOM', 'LONG', 'KOREY', 'JOSPEH', 'COLTON', 'WAYLON', 'VON', 'HOSEA', 'SHAD', 'SANTO', 'RUDOLF', 'ROLF', 'REY', 'RENALDO', 'MARCELLUS', 'LUCIUS', 'KRISTOFER', 'BOYCE', 'BENTON', 'HAYDEN', 'HARLAND', 'ARNOLDO', 'RUEBEN', 'LEANDRO', 'KRAIG', 'JERRELL', 'JEROMY', 'HOBERT', 'CEDRICK', 'ARLIE', 'WINFORD', 'WALLY', 'LUIGI', 'KENETH', 'JACINTO', 'GRAIG', 'FRANKLYN', 'EDMUNDO', 'SID', 'PORTER', 'LEIF', 'JERAMY', 'BUCK', 'WILLIAN', 'VINCENZO', 'SHON', 'LYNWOOD', 'JERE', 'HAI', 'ELDEN', 'DORSEY', 'DARELL', 'BRODERICK', 'ALONSO'])

nameFile と nameGenerator の型は正しいようですが、名前は文字列のリストではなく、一度に 1 つの文字列にするのが理想的です。name がリストである理由は .split がリストを返すためだと思いますが、ファイル内の名前を区切る別の方法を見つけることができませんでした。また、先頭と末尾の引用符を削除するために .strip を使用しました。

4

1 に答える 1

5

ファイルには1 行が含まれているため、実際にはファイルをループする必要はありません。分割リストをループするだけです:

def name_gen():
    with open('C:/python/namessample.txt') as nameFile:
        for name in nameFile.read().split(','):
            yield name.strip('"')

または単にリスト全体を返します。とにかく、すでにメモリに読み込んでいます:

def name_gen():
    with open('C:/python/namessample.txt') as nameFile:
        return [name.strip('"') for name in nameFile.read().split(',')]

各行に複数の名前が含まれる複数の行がある場合は、ループをネストできます。

def name_gen():
    with open('C:/python/namessample.txt') as nameFile:
        for line in nameFile:
            for name in line.rstrip('\n').split(','):
                yield name.strip('"')
于 2013-03-13T22:46:05.867 に答える