1

WC -l を使用して、テキスト ドキュメントの行数を数えています。しかし、ここで問題が発生しました。

さまざまな数値の組み合わせをさまざまなファイルに書き込む Python コードを取得しました。各ファイルには、組み合わせの各番号が別の行に含まれています。

wc -l を使用すると、最後の行がカウントされません!

以下はpythonコードです:

import os
import itertools
lst = [6,7,8,9,12,19,20,21,23,24,26,27,28,29,43,44]
combs = []
for i in xrange(1, len(lst)+1):
els = [list(x) for x in itertools.combinations(lst, i)]
combs.extend(els)
for combination in els:
  combination_as_strings = map(str, combination)
  filename = "_".join(combination_as_strings) + ".txt"
  filename = os.path.join("Features", filename)
  with open(filename, 'w') as output_file:
     output_file.write("\n".join(combination_as_strings))

前もって感謝します、

アフマド

4

4 に答える 4

4

使用しているのjoinは、行の間に改行を配置することですが、最後の行の終わりには配置しません。したがって、wcは最後の行をカウントしません(改行の数をカウントします)。

output_file.write("\n")スクリプトの最後のwith句に次のように追加します。

  with open(filename, 'w') as output_file:
     output_file.write("\n".join(combination_as_strings))
     output_file.write("\n")
于 2013-01-30T00:21:19.793 に答える
2

これの変種を見ていると思います:

$ printf '1\n2\n3' | wc -l

Bashプロンプトでこれを入力します-2最終的なものがないため印刷されます\n

比較:

$ printf '1\n2\n3\n' | wc -l

final のために 3 を出力し\nます。

\nPython ファイル メソッドは、出力にa を追加しません。コードを修正するには、次のようにwritelinesを使用します。

with open(filename, 'w') as output_file:
    output_file.writelines(["\n".join(combination_as_strings),'\n'])

またはファイルに出力します。

with open(filename, 'w') as output_file:
     print >>output_file, "\n".join(combination_as_strings)

またはフォーマット テンプレートを使用します。

with open(filename, 'w') as output_file:
     output_file.write("%s\n" % '\n'.join(combination_as_strings))
于 2013-01-30T00:22:27.457 に答える
1

なぜ使用しないのwritelinesですか?

output_file.writelines(line+"\n" for line in combination_as_strings)
于 2013-01-30T00:21:50.057 に答える
1

このwcコマンドは、ファイル内の改行文字数をカウントします ( \n)。

したがって、ファイルに 10 行ある場合、改行文字が 9 つあるため、9 が返されます。

各ファイルの最後に空の新しい行を追加することで、必要に応じて機能させることができます。

于 2013-01-30T00:21:57.983 に答える