1

バックストーリー: 1 列に 300 ページを超える単語の情報ドキュメントを受け取りました。VBA と Excel を使用して、区切り記号を使用してデータを転置しました (文字列の先頭にあるすべての大文字は姓のみです)。

これで、行データができました。理想的には、列を次のようにする必要があります。

名前 v1 v2 v3 v1 v2 v3 v1 v2 v3 v1 v2 v3

すべてのトリプレットについても同様です。

問題が発生するのは、v1 が常にすべてのインスタンスにあるとは限らないことです。最初のサイクルの v1 が 2 番目のサイクルの v1 と同じ場合、元のデータは v1 の再入力をスキップしただけです。

例:

John v1 v2 v3 v1 v2 v3 v1 v2 v3(理想!)

Jimm v1 v2 v3 v2 v3 v2 v3 v1 v2 v3(理想的ではありません!)

最後に、Jimm が John の列を法廷の列の空白または if(offense、法廷が満足したかどうかを確認し、そうでない場合は前の法廷を使用) と一致させたいと考えています。

幸いなことに、私の v1、v2、および v3 では、文字列の先頭に一貫した区切り文字があります (v1= Court: ; v2= Offense ; v3= Sentence)。データの反復リストを作成する方法に関するヒントやアドバイスはありますか?

サンプルデータ:

名前、名、姓

裁判所: テスト情報 1

オフェンス: テストオフェンス1

文: テスト文1

オフェンス: テストオフェンス2

文: テスト文 2

コート: テストコート3

オフェンス: テストオフェンス3

文: テスト文 3

注: 2 番目のサイクルには Court1 と同じであるため、コートは含まれません。これは、データの収集方法に問題があります。

必要なのは、余分な裁判所を挿入するリストか、すべての列を一列に並べた転置リストだけです。

4

1 に答える 1

1

これを行うためのよりスマートな方法がありますが、私はあなたが理解しているアルゴリズムに最も近い Python でこれを記述しようとしました:

with open("crimes.txt") as fp_in, open("fixedcrimes.txt", "w") as fp_out:
    previous_court = None
    previous_line = None
    for line in fp_in:
        if line.startswith("Offense:"):
            if not previous_line.startswith("Court:"):
                fp_out.write(previous_court)
        if line.startswith("Court:"):
            previous_court = line
        fp_out.write(line)
        previous_line = line

最初の行は、2 つのファイル オブジェクトを作成します。を使用してテキスト ファイルの行をループすることができますfor line in:。それ以外はすべて意味があると思います。(Python ではインデントが重要であることを忘れないでください。) また、ファイルが標準の csv ではないことに注意してください。一部の行では区切り文字としてコロン スペースが使用されているようですが、NAME 行ではコンマ スペースが使用されているようです。 .

とにかく、上記のコードは

NAME, First Last
Court: Test Info1
Offense: Test Offense1
Sentence: Test Sentence1
Offense: Test Offense2
Sentence: Test Sentence2
Court: Test Court3
Offense: Test Offense3
Sentence: Test Sentence3

の中へ

NAME, First Last
Court: Test Info1
Offense: Test Offense1
Sentence: Test Sentence1
Court: Test Info1
Offense: Test Offense2
Sentence: Test Sentence2
Court: Test Court3
Offense: Test Offense3
Sentence: Test Sentence3
于 2013-03-29T19:34:33.693 に答える