私はファイルを読み込み、すべての行の長さが同じかどうかを判断する必要があります。彼らは私が "良い"フォルダにファイルを移動し、それらがすべて同じ長さでない場合、私は "悪い"フォルダに移動し、どの行が残りの部分と同じではないことを言うdocを書く。どのような助けや方法で始めることができますか?ファイルを読み込んで、すべての行が同じ長さであるかどうかを調べる
答えて
まず第一に、あなたはここで、example.txt
をファイルを読み込み、リスト内のすべての行を入れて、content
ことができます。
with open(filename) as f:
content = f.readlines()
次は行の末尾からすべての改行文字をトリミングし、それを配置する必要があります別のリストresult
中:今すぐ
for line in content:
line = line.strip()
result.append(line)
あなたが悪いの行をしたいので、それはすべての文の長さを取得することは難しいことではありません、そして、リストをあなたがループ:
for line in result:
lengths.append(len(line))
したがって、result
のi番目の要素の長さは、[lengths
のi番目の要素]です。リスト内でどのような行の長さが最も多く発生しているかを判断することができます。これは1行のように簡単です!
most_occuring = max(set(lengths), key=lengths.count)
今、私たちは別のfor-loop
が最も-occuringに対応し、bad-lines
にそれらを追加しない長されたチェックすることができます:
for i in range(len(lengths)):
if (lengths[i] != most_occuring):
bad_lines.append([i, result[i]])
次のステップは、ファイルが行く必要チェックです、良いフォルダ、または悪いフォルダ:
if len(bad_lines == 0):
#Good file, move it to the good folder, use the os or shutil module
os.rename("path/to/current/file.foo", "path/to/new/desination/for/file.foo")
else:
#Bad file, one or more lines are bad, thus move it to the bad folder
os.rename("path/to/current/file.foo", "path/to/new/desination/for/file.foo")
行う可能な、別のファイルへの不正な行を書いている最後のステップは、我々はすでに悪いのラインを持っているので、リストbad_lines
に:
with open("bad_lines.txt", "wb") as f:
for bad_line in bad_lines:
f.write("[%3i] %s\n" % (bad_line[0], bad_line[1]))
それは、docファイルではありませんが、私はこれは素晴らしいスタートだと思います。本当にdocファイルに書きたい場合は、docxモジュールを見ることができます。
EDIT:ここにpythonスクリプトの例を示します。
with open("example.txt") as f:
content = f.readlines()
result = []
lengths = []
#Strip the file of \n
for line in content:
line = line.strip()
result.append(line)
lengths.append(len(line))
most_occuring = max(set(lengths), key=lengths.count)
bad_lines = []
for i in range(len(lengths)):
if (lengths[i] != most_occuring):
#Append the bad_line to bad_lines
bad_lines.append([i, result[i]])
#Check if it's a good, or a bad file
#if len(bad_lines == 0):
#Good File
#Move file to the good folder...
#else:
#Bad File
with open("bad_lines.txt", "wb") as f:
for bad_line in bad_lines:
f.write("[%3i] %s\n" % (bad_line[0], bad_line[1]))
'line = line.strip()'は、行末の改行文字より少しだけトリムします。 – Evert
とにかく改行を削除する必要はありません。それらは同じ長さでなければなりません。 – zondo
あなたはそれについてもう少しストリッピングしていますが、それは仕事を完了します。あなたは実際にそれを取り除くこともできますが、それはリストのほうがきれいに見えます。それを省略した場合は、書き込みファイルの部分にある\ nも削除する必要があります。 これがダウンリストに追加された理由ですか?これは私の最初の答えですので、改善すべき点を知りたいと思います。 私はあなたの答えzondoにコメントすることはできませんが、彼はまた異なっている行を尋ねるので、それらのすべてをループする必要があります。私の答えでは、時間の効率を上げるために部品を1つのループにまとめることができることに注意してください(それほど多くはありませんが、まだO(n)になります) –
あなたはall()
を使用する必要があります。
with open(filename) as read_file:
length = len(read_file.readline())
if all(len(line) == length for line in read_file):
# Move to good folder
else:
# Move to bad folder
all()
が短絡されているので、それは最初の非一致でファイルの読み込みを停止します。
私はこのメソッドを試していますが、このエラーが発生していますlength = len(file.readline())AttributeError: 'str'オブジェクトに 'readline'属性がありません –
@JustinStarkman:すみません、今修正されました。 – zondo
- 1. C#文字列内のすべての文字が同じであるかどうかを調べる
- 2. アルゴリズム - あるサイズの対角線が行列内に同じ値であるかどうかを調べる
- 3. charが改行であるかどうかを調べる
- 4. PHPでページが読み込まれる内容を調べる
- 5. ブラウザでSwfの読み込み時間を調べる
- 6. Unityで読み込み画面を作る方法、シーンが完全に読み込まれたかどうかを調べることができます
- 7. ファイルが.NETで書き込みアクセス権を持っているかどうかを調べる
- 8. rubyスクリプトがウィンドウで実行されているかどうかを調べる
- 9. matlabで行列が空であるかどうかを調べる方法は?
- 10. 無向グラフが木であるかどうかを調べる
- 11. ResourceRequestがAJAXリクエストであるかどうかを調べる
- 12. 単語が複数であるかどうかを調べる
- 13. シンボルがテンプレートであるかどうかを調べる関数
- 14. 数値がfloat64であるかどうかを調べる
- 15. mvc 4 IEnumerableがnullであるかどうかを調べる
- 16. カラムがNOT NULLであるかどうかを調べる
- 17. バイトが0x00であるかどうかを調べる
- 18. ddplyを通じてどの要素が最大であるかを調べる
- 19. GeventでJoinableQueueの長さを調べる
- 20. デバッガでNSStringの長さを調べる
- 21. t-sqlの型が固定長であるかどうかを調べる方法(実行時)?
- 22. 同じディレクトリのファイルからどのように読み込むのですか?
- 23. テキストファイルの読み込みと列数のチェックはすべて同じです。
- 24. solrサーバーが実行中であるかどうかを調べる方法
- 25. WebページがWebブラウザに完全に読み込まれているかどうかを調べる方法は?
- 26. TransactionScopeがコミットされているかどうかを調べる
- 27. 実行ファイルがPATHで利用可能かどうかを調べる
- 28. ファイルがPythonで開かれているかどうかを調べる
- 29. 正しい配列の長さがCでmallocedされているかどうかを調べる
- 30. 読み込まれた画像が有効でないかどうかを調べる(例:404エラーページ)
コードのスニペットをお願いしますか?ヒント:この作業を行うためにいくつかの 'for'ループとdo-whileループが必要です。さらに、各行と各ページの状態を保存します。 Word文書用のVBS。これは、出力を生成するたびに呼び出されるテンプレートとして作成されます。ここで多くの仕事があります。 – Sparky256