2016-05-29 4 views
0

私は新しい行の文字で分割したテキスト文書のリストをPythonで持っています。データの最後は、テキスト文書に#と表示されます。私はリストの各要素を数え、リスト内の文字列をタブ文字で分割し、2次元のリストを作成する必要があります。リスト内の文字列を分割するpython

これはかなり単純だと思っていましたが、自分のコードから結果が得られません。リスト内の文字列は全く分割されていません。\tに気をつけてください。

with open('names.txt') as names: 
    records = names.read().split('\n') 
recordcount = 0 
for item in records: 
    if item != '#': 
     recordcount += 1 
     item = item.split('\t') 
print (records) 
print (recordcount) 

これは、タブ文字が面倒なことと関係していますか?あるいは、リストの要素をインプレースで置き換えることはできませんか?スプリットレコードで新しいリストを作成する必要がありますか?

答えて

3

ローカル変数を再割り当てするだけです。これはリストの内容には影響しません。これを試してみてください:

for i, item in enumerate(records): 
    if item != '#': 
     recordcount += 1 
     records[i] = item.split('\t') 
+0

おお、はい、もちろん、それは実際には明らかでした。ありがとうございました! – GoatsWearHats

1

あなたはその場でリスト項目を置き換えることができますが、item = item.split('\t')ちょうどローカル変数itemが再割り当て。たとえば、リストアイテムを簡単に置き換えることができます。 records[index] = itemenumerate機能を使用して、indexの権利を得ることができます。

はあなたのコードは、あなたがやりたいように変更:

with open('names.txt') as names:            
    records = names.read().split('\n')          
recordcount = 0                
for index, item in enumerate(records):          
    if item != '#':               
     recordcount += 1              
     item = item.split('\t')            
     records[index] = item            
print (records)                
print (recordcount) 
+0

はい、ありがとうございます。このような明らかな誤りのような私の仕事をもっとよく見ていたはずです。ありがとう。 – GoatsWearHats

関連する問題