2012-02-19 5 views
3

以下の機能に問題があります。ファイルの罰金を分割するようだが、1つのだけの要素として返しますPythonをリストにファイルを分割しました

機能:

def splitRoute(): 
    route = [] 
    for line in open("route.txt","r").readlines(): 
    line = line.replace("\r","") 
    line = line.replace("\n","") 
    line = string.split(line, '>') 
    route.append(line) 
    return route 

出力:

[['B', 'F']] 

route.txt内容:

B>F 

はですファイルには1行しかないので、1つの要素を返すだけですか? 別のファイルを7x7のリストに分割する別の関数がありますが、それはうまくいきますが、7つの要素を持つために7つの要素にしか到達しません。

+0

、期待している? –

答えて

3

なぜ改行を置き換えますか?文字列を分割するだけです:

def splitRoute(): 
    route = [] 

    for line in open('route.txt', 'r'): 
    route.append(line.strip().split('>')) 

    return route 
+0

完璧に感謝しました。 –

+1

@Schmooo、 '+'が使われるたびにリストの新しいコピーを作成します。 'append'の代わりに' extend'を使うことをお勧めします。 'sum'を使う必要はありません。 – senderle

+0

@senderle延長のおかげで変更されました。 –

1

splitリストを作成します。次に、別の(空の)リストにリストするappendです。その結果、リストの中にリストが得られます。行数が増えれば、リストのリストが長くなります。 ...あなたは空のリストを作成

def splitRoute(): 
    route = [] 

すべての行については

for line in open("route.txt","r").readlines(): 
    line = line.replace("\r","") 
    line = line.replace("\n","") 

、あなたは空の文字列で、\ rと\ n文字を置き換えます。ここでは、コードの迅速な内訳です​​。これは、line.strip()'apple\n\r'.strip() - >'apple')を使って簡単に行うことができます。また、後で閉じることができるように、ファイルをファイル名に保存する必要があります。最後に、ここでreadlinesを使用する必要はありません。ファイルを直接反復処理するだけです。

line = string.split(line, '>') 

は今、あなたは、lineが参照する文字列を取るリストに分割し、lineにリストを割り当てます。今すぐlineはこのようになります:['B', 'F']。今、あなたはrouteからlineを追加しました

route.append(line) 
    return route 

、および routeは次のようになります。 [['B', 'F']]

単一のリストを作成する場合は、appendの代わりにextendを使用します。

def splitRoute(): 
    route = [] 
    f = open('route.txt', 'r') 
    for line in f: 
    route.extend(line.strip().split('>')) 
    f.close() 
    return route 

または、withを使用して、より読みやすいインデントレベルを採用:

def splitRoute(): 
    route = [] 
    with open('route.txt', 'r') as f: 
     for line in f: 
      route.extend(line.strip().split('>')) 
    return route 

二行('B>F\nF>X\n')とのファイルの出力:あなたがいた他に何まあ

>>> splitRoute() 
['B', 'F', 'F', 'X'] 
+0

2次元配列にするには、リスト内のリストが必要ですか?これは1つのリストで行うことができる方法ですか? –

+0

2D配列が必要な場合は、 'extend'の代わりに' append'を使います。 Pythonで2D配列を作成する最も簡単な方法は、本当にリストのリストを作成することです。また、タプルを使用してdictを索引付けすることもできます。 'd = {}; d [0、0] = 1; d [0,1] = 0; d [1,0] = 1; d [1,1] = 0などとなる。しかし、これはほとんどの場合リストのリストよりいくらか遅いです。 – senderle

関連する問題