1

データベースからExcelファイルに大量のデータをダンプしています(頻度よりも量の点で、つまり一度に100Kまたは> 400MBのレコードをダンプしています)。現在、ダンプ プロセスは Python、R、および Java (POI ライブラリを使用) で実行されています。ダンプ プロセスの一環として、データベースから中間ファイル (パイプで区切られたテキスト ファイル) にデータを読み取り、コードによって取得されて Excel ファイルを更新します。最近、改行文字を含むデータベースからのテキストにより、パイプ区切りファイルが無効になるという問題が発生しました。これは、1 つのレコードが 1 行ではなく複数行にまたがるためです。例えば、

| Col1 | Col2 | Col3 |  
| Val  | Val2 | Val3 |

パイプ区切りファイルの有効な例です。データに改行が含まれている場合は、次のようになります。

| Col1 | Col2 | Col3 |
| Val1


| Val2 | Val3 


|

このようなシナリオは把握するのが難しくなり、その結果、そのようなチェックを行うために実行する必要があるよりも多くのコーディングが必要になります。

そのような一時データを書き出すために使用できるライブラリ/テクニックがあるかどうか疑問に思っていました。このような大量のデータではパフォーマンスが問題になる可能性があることを考えると、XML が解決策になるかどうかはわかりません。JSON の方が適しているように思えるかもしれませんが、ここですべてのオプションを把握しているわけではありません。

4

1 に答える 1

2

csv列の数が常に同じであることが保証されている場合、これはcsvの奇妙な方言であり、Pythonのモジュールで解析できるはずです。また、Java(Rではないかもしれません)にも同様の機能があると思います。組み込みまたはすぐに利用できるライブラリ。

または、何らかの理由でパーサーを自分で作成した場合は、改行を処理するためにパーサーを拡張するのは非常に簡単です。たとえば、行を読み取って分割し|、すべてのフィールドがあると想定する代わりに、行を読み取り、分割し|、カウントして十分なフィールドがあるかどうかを確認し、ない場合は次の行を読み取って追加し、再試行します。ただし、自分でハックしようとするよりも、すでに作成およびテストされているコードを使用する方がはるかに優れています。

(もちろん、フィールドに|文字を含めることができる場合、この形式はあいまいであり、何らかの方法でエスケープしない限り、何も解析できません。)

もう1つのオプションは、一方の端で改行(およびその他の特殊文字)を引用またはエスケープし、もう一方の端で改行を解除することです。繰り返しになりますが、これはまともなcsvライブラリがあなたのために行うことです(ほとんどあなたがそれを望んでいるかどうかにかかわらず)。

また、類似しているが同一ではないカスタム形式を考え出す代わりに、準標準のcsv方言(通常は「Excelのデフォルトで定義されている」を意味する)の使用を検討することをお勧めします。

標準のcsv方言を使用することの明らかな利点の1つは、Excelが結果を直接読み取ることができることです。これにより、長いチェーンから1つのレイヤーが削除される可能性があります。(もちろん、Excelのデータアクセス機能を使用して実際のデータベースをインポートまたは前面に表示することで、さらに多くのレイヤーを削除できる場合があります。)

JSONに変更したい場合、変更できない理由はありません。しかし、ここでそうする理由はないようです。柔軟で動的なレコードタイプがある場合は、JSON(またはYAMLなどの類似したもの)が間違いなく最適です。ただし、静的レコードタイプが何度も繰り返される場合、JSONはそれらのフィールドの名前を何度も繰り返すことを意味します。XMLほど悪くはありませんが、作成、受け渡し、解析するための追加情報であり、実際のメリットはありません。

したがって、ここでの正しい答えは次のとおりです。可能であればExcelスタイルのcsv、何らかの理由で不可能な場合に改行を処理する方法のルールが追加された独自のcsv方言。

于 2012-12-19T21:40:33.140 に答える