2017-08-22 9 views
1

テキストファイルからランダムな行番号nを取り込んで、新しいテキストファイルに書き込む必要があります。 コードは機能しますが、行は元のファイルとは異なる書式で取り込まれ、書き込まれます。 これはコードです:random.sampleを使用した不正なフォーマット

import random 

with open('textfile.dat') as f: 
    lines = random.sample(f.readlines(),100) #n=100 for example 

out=open('newfile.dat', 'w+') 
print >>out, lines 

textfile.datのごく一部:

626.0649 310.7645 122.8257 
626.1954 310.5412 123.0418 
627.0475 310.7212 123.2242 
626.6918 311.0145 123.6525 
... 

そしてnewfile.datのごく一部:

['632.3587 304.9801 101.2915\n', '644.4067 307.2889 114.6692\n', '626.0014 312.0789 98.2628\n', '653.1418 307.1721 100.6861\n', ... 

私のpython 2.7を使用していますmacOS上で。どうすれば修正できますか?

答えて

3

うーん... readlinesの対応が...ドラムロール... writelinesです。

out.writelines(lines) 
1

あなたはリストであるlinesを書いているので、リスト表現を使用して印刷されます - 項目の間に角括弧とカンマが付きます。

for l in lines: 
    out.write(l) 

ああ、とout.close()

+0

ありがとう!今それは動作します! –

0

することを忘れないでください:

for l in lines: 
    print >>out, l 

以上(のpython3と互換性があるため):何が欲しいのは、ループの中で一つずつをプリントアイテムが必要ですあなたは一度に各行を書く必要があります。

for line in lines: 
    print >> out, l 
0

リストの各項目を個別に書き込むのではなく、生のリストを作成しています。また、これはPythonの3と前方互換性があります:

with open('textfile.dat') as in_f, open('newfile.dat', 'w+') as out_f: 
    out_f.writelines(random.sample(in_f.readlines(), 100)) 
+0

@Stefan:ありがとう - 私は 'random.sample'が一意の要素を選択するのを忘れていました。 OPのコードと一致するように編集されました。 – Billy

関連する問題