データの最初の列を削除する必要がある大きな [〜#〜] csv [〜#〜] ファイルがあります。列の値の一部が科学的な数値に変換されるため、Excelで開くことができません。
Notepad ++ を使用していますが、ファイルEXEの最初の列を文字列化しようとしています。
1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5
のように見えるように
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Notepad ++の検索と置換は、これに簡単に使用できる正規表現(regex)をサポートしています。
次の正規表現を使用して検索します。
^[^,]+,(.+)
これは、可能な限り多くの文字が続く行の先頭に一致し、コンマの後にコンマが続き、残りの行は続きません。行の残りは最初のサブマッチとしてグループ化されます。
これでグローバルに置き換え:
\1
これは最初のサブマッチ(残りの行)を示します。これにより、各行は最初の列とコンマの後のすべてに置き換えられます。
単一のグローバル置換でそれを行う上記の方法を見つけた(そしてそれに応じて返信を更新した)後、 this reply は基本的に同じですが、使用されている正規表現の包括的な説明も示されています。
注:より短い正規表現^[^,]+,
は、Notepad ++が最後の列を除くすべての列を置き換えるため、空の文字列でのグローバル置換には使用できません。最初の列を置き換えた後、2番目の列(これは最初であり、正規表現と完全に一致します)が置き換えられます。次に3番目、というように続きます。ただし、短い正規表現は他のエディターで完全に機能します(例: PSPad または vim )。
押す Ctrl + H 次の置換を実行します。
_Find what: .*?,(.*)
Replace with: \1
Wrap around: checked
Regular expression: selected
. matches newline: unchecked
_
今押します Alt + A すべての出現箇所を置き換えます。
正規表現.*?,(.*)
は行全体に一致します。
_.*?,
_は、コンマ自体を含め、最初のコンマより前のすべてに一致します。
_.*
_は任意の数の任意の文字の出現を意味し、疑問符は数量詞lazyを作成します。つまり、可能な限り少ない文字と一致します。 。
_(.*)
_は、最初のカンマ以降のすべてに一致します。
_.*
_を括弧で囲むと、サブパターンに変換されるので、replaceフィールドでマストにアクセスできます。
_\1
_は最初のサブマッチを表します(_(.*)
_に一致)。
その結果、Notepad ++は最初のコンマに続くすべてのもので行を置き換えます。
Windowsでは、次のように実行できます。
for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m >> output.csv
私はあなたが6列しかないと仮定しました。さらに多くの列がある場合は、トークンフィールドで*を試してみてください。アイデアは コマンド用のWindows から取得
CSVをExcelに読み込んで、数値をテキストとして処理できるようにする必要があります(科学的数値に変換されないようにします)。
Notepad ++には、組み込みの列編集機能と(、)コマンドによる整列(TextFXプラグイン)があり、初めての場合に適したグラフィカルなポイントアンドクリックソリューションを提供します。これにより、正規表現やシェルプログラミングを使用する必要がなくなります。通常、どちらも必要な機能が完全に実行されるまでデバッグが必要です。
開始点:列がずれているCSVファイルなので、列ごとに編集するのは簡単ではありません...
1,Value1,value2,value3,value4,value5
3445,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234,Value1,value2,value3,value4,value5
11,Value1,value2,value3,value4,value5
...
手順:
対象の行を選択します-おそらくファイル全体です。
メニューコマンド[TextFX]> [TextFX Edit]> [コンマ(、)で複数行を整列]を使用します。これにより、すべての行が列ごとに整列され、列の編集が容易になります。
1 ,Value1,value2,value3,value4,value5
3445 ,Value1,value2,value3,value4,value5
12345,Value1,value2,value3,value4,value5
1234 ,Value1,value2,value3,value4,value5
11 ,Value1,value2,value3,value4,value5
最初のカンマ(、)の後の列に列モードと入力します。行数が少ない場合は、キーボードコマンドAlt + Shift + DownArrowを使用します。
多数の行(大きなファイル)で作業する必要がある場合は、Alt +マウスを使用して、first行の目的の列をクリックしてから、ファイルの最後の行に移動し、Alt + Shift +同じ列の位置をクリックします。これにより、ENTIREファイルの列モードがアクティブになります。すべてのコンマの後ろに縦線が表示されます。
削除列モードでは、文字の列全体が削除されます。したがって、すべての行の最初のカンマより前のすべてを一度にすべて削除して取得できます。
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
Value1,value2,value3,value4,value5
完了!
これまでに提案された他のさまざまなソリューションと比較したこのソリューションに関する注意:
列モード編集は非常に強力であり、TextFXプラグインオプションと組み合わせると、さまざまな状況にポイントアンドクイックで適用されます。
たとえば、2番目の列またはN番目の列をすばやく削除することを決定した場合、このアプローチはほとんど変更なしで機能します。
一方、正規表現、シェルスクリプトは目的を達成しますが、複雑な問題では構文の「デバッグ」により多くの時間を費やすことになります。
Notepad ++の多用途の組み込み機能は、その主な長所の1つです。「プログラミング」に頼らなくても、かなりのパワーを得ることができます。
Notepad ++の Pythonコンソールプラグイン に精通している場合は、別の方法をお勧めします。 Notepad ++ドキュメントにテキストを追加し、コンソールで次のスクリプトを実行する必要があります。
res = []
data = editor.getText().split('\r\n')
for i in data:
res.append(i.split(',')[1:])
for i in res:
editor.addText(', '.join(i)+'\r\n')
このスクリプトは、結果のテキストを現在のNotepad ++ドキュメントに追加しました。