2016-10-06 15 views
0

私は同じ長さの文字列のリストを2つ持っていますが、ファイルに書き込むときにファイル内の別々の行に表示されるときはリストとファイルの長さになります一致していない:pythonリストをテキストファイルに書き出す結果の長さが異なる

print len(x) 
print len(y) 

317858 
317858 

をしかし、私はテキストファイルにリスト内の各項目を書くとき: テキストファイルの行数は、リストの長さに一致していません。

with open('a.txt', 'wb') as f: 
    for i in x[:222500]: 
     print >> f, i 

(Linuxの場合)wc -l a.txtは、222499が正しいです。

with open('b.txt', 'wb') as f: 
    for i in y[:222500]: 
     print >> f, i 

(Linuxの場合)wc -l b.txtは239610が間違っています。

私の端末でvi b.txt、それは239610本のラインので、私はこれが起こっている理由としてはかなり混乱していますが持っていた。..

どのように私はこれをデバッグすることができますか?

答えて

0

書かれた文字列の数よりも多くの行をb.txtで見つけることができる唯一の方法は、yの文字列の一部に新しい行が実際に含まれていることです。私は確信して他の人だ

a 
b 
c 
+0

私がしたことは '' \ n''を ''''に置き換えただけで今は動作します。どうも! – jxn

0

:ここ

はリストlは2つの要素が含まれているため、この小さなコードは、2を出力しますが、結果のファイルは3行が含まれています

l = [ 'a', 'b\nc'] 
print len(l) 
with open('tst.txt', 'wb') as fd: 
    for i in l: 
     print >> fd, i 

小さな例ですこの違いの原因をすばやく指摘します(これは改行文字に関連しています)。しかし、「これをどのようにデバッグできますか?私はその質問に対処したい:

合格と不合格の実行の唯一の違いはリストそのものなので、私はそれらに集中するだろう。これをトリガするリスト(すなわち、少なくとも1つの異なるリスト要素)にはいくつかの違いがある。したがって、バイナリ検索を実行して、これをトリガする最初の異なるリスト要素を見つけることができます。

これを行うには、リストを半分にチョップするだけです(例:各リストの最初の317858/2行を取ります。あなたはまだ同じ症状を観察していますか?もしそうなら、最初の半分で演習を繰り返してください。それ以外の場合は、後半でその演習を繰り返します。そうすれば、これを引き起こす行を識別するために最大でも19回の試行が必要になります。その時点で、問題は単一の文字列に簡素化されています。

文字列を見るだけで問題を見つけられる可能性はありますが(原則として文字列が非常に長い場合など)、それらの文字列をバイナリ検索して最初の文字を識別することができますこの問題。

関連する問題