Notepad ++ - Menghapus kolom pertama dalam file yang dipisahkan koma


14

Saya memiliki file CSV besar yang harus saya hapus kolom data pertama. Saya tidak bisa membukanya di Excel karena Excel mengonversi beberapa nilai dalam kolom ke angka ilmiah.

Saya menggunakan Notepad ++ , dan saya mencoba merangkai kolom pertama dari file 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

agar terlihat seperti

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

Jawaban:


13

Pencarian dan penggantian Notepad ++ mendukung ekspresi reguler (regex) yang dapat dengan mudah digunakan untuk ini.

Gunakan regex berikut untuk mencari:

^[^,]+,(.+)

Ini cocok dengan awal baris diikuti oleh karakter sebanyak mungkin bukan koma diikuti oleh koma diikuti oleh sisa baris. Sisa baris dikelompokkan sebagai pengiriman pertama.

Ganti secara global dengan ini:

\1

Ini menunjukkan pengiriman pertama (sisa baris). Dengan itu setiap baris diganti dengan semuanya setelah kolom pertama dan koma.

Setelah saya menemukan cara di atas untuk melakukannya dalam satu penggantian global (dan memperbarui balasan saya sesuai), saya perhatikan bahwa balasan ini pada dasarnya identik tetapi juga memberikan penjelasan komprehensif tentang regex yang digunakan.


Catatan: Regex yang lebih pendek ^[^,]+,tidak dapat digunakan untuk penggantian global dengan string kosong karena Notepad ++ kemudian akan mengganti semua kolom kecuali yang terakhir: Setelah mengganti kolom pertama, kolom kedua (yang sekarang adalah yang pertama dan cocok persis dengan regex) akan diganti, lalu yang ketiga, dan seterusnya. Namun, regex yang lebih pendek berfungsi sempurna dengan editor lain (mis. Dengan PSPad atau vim ).


Ini cara untuk pergi ke sini. Jika OP sudah memiliki N ++ ini adalah cara tercepat. Saya melakukan ini banyak dengan PSPad (yang bisa melakukan ini dalam satu jalan, btw). Lihat juga cara kerja regex: rubular.com/r/OiehkBT0vA
simbabque

Notepad ++ tidak memproses input baris demi baris, tetapi karakter demi karakter. Itu memiliki beberapa keuntungan rapi (seperti pola multi-line).
Dennis

+1 untuk hasil edit. Sayangnya, jawaban Anda adalah komunitas wiki sekarang.
Dennis

@ Dennis Ya, saya mengedit terlalu sering karena saya tidak mengetahui batas 10-suntingan.
Bicara

Kenapa tidak ^[^,]+,dan ganti dengan yang kosong?
Knittl

10

Tekan Ctrl+ Hdan lakukan penggantian berikut:

Find what:          .*?,(.*)
Replace with:       \1
Wrap around:        checked
Regular expression: selected
. matches newline:  unchecked

Sekarang tekan Alt+ Auntuk mengganti semua kemunculan.

Bagaimana itu bekerja

  • The ekspresi reguler .*?,(.*) cocok seluruh baris:

    • .*?, cocok dengan semuanya sebelum koma pertama, termasuk koma itu sendiri.

      .*berarti jumlah kemunculan karakter apa pun, dan tanda tanya membuat kuantifier malas , yaitu, sesedikit mungkin karakter cocok.

    • (.*) cocok dengan semuanya setelah koma pertama.

      Melampirkan .*dalam tanda kurung mengubahnya menjadi subpattern, sehingga tiang dapat diakses di bidang ganti.

  • \1mewakili pengiriman pertama (cocok untuk (.*)).

    Akibatnya, Notepad ++ mengganti baris dengan segala sesuatu yang mengikuti koma pertama.


Baru saja mendapat ide yang sama setelah memperhatikan bahwa ^[^,]+,secara global diganti dengan string kosong tidak akan berfungsi di Notepad ++. (+1)
speakr

6

Di Windows, Anda dapat melakukannya sebagai berikut.

for /F "tokens=2,3,4,5,6 delims=," %i in (Input.csv) do @echo %i,%j,%k,%l,%m  >> output.csv

Saya berasumsi bahwa Anda hanya memiliki 6 kolom. Jika Anda memiliki lebih banyak kolom, coba bereksperimen dengan * di bidang token. Ide diambil dari Windows untuk perintah


2
untuk jumlah kolom yang berubah-ubah, gunakan ini:for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv
SeanC

3

Dengan asumsi Anda memiliki sistem linux atau lingkungan gaya unix (saya suka gow , atau Anda dapat menghapus utilitas dari unixutils ) Saya percaya menjalankan file melalui cut -d , -f2-6harus melakukan trik - itu harus, jika saya ingat dengan benar akan melakukan trik - -dset the pembatas, dan f2-6mencetak karakter kedua hingga ke-6.

cat input.csv | cut -d , -f2-6 > output.csvakan melakukan trik mengambil file input dan mengeluarkan file output. Ini tidak menggunakan notepad, tetapi cepat dan sangat sederhana.


Terima kasih, saya baru saja mengklik tautan dan saya mendapat kesalahan 403?
MikeD

kedua tautan berfungsi untuk saya - yang aneh. Saya biasanya menemukan gow dengan googling untuk itu - itu pada repo github milik bmatzelle. Cygwin mungkin juga bisa menjadi pilihan, tetapi ini merupakan kerja keras untuk hal semacam ini
Journeyman Geek

2

Anda harus dapat memuat CSV ke excel dan menjadikannya memperlakukan angka sebagai teks (mencegahnya beralih ke angka ilmiah).

  1. Buka Excel
  2. Tab Data
  3. Dari Teks
  4. Pilih Dibatasi
  5. Pilih Lainnya: ","
  6. Untuk semua kolom pilih di jendela Pratinjau Data, dan pilih Teks
  7. Hapus kolom Anda
  8. Simpan sebagai CSV

Mengedit dan menyimpan file CSV di Excel sering merusak angka seperti kode EAN dan float gaya AS di Eropa Excel. Bahkan jika Anda mengatur semuanya ketika mengimpor, itu terjadi memakan beberapa hal. Saya tidak bisa merekomendasikannya, meskipun mungkin akan berhasil. Dalam lingkungan yang produktif, saya akan menyarankan untuk tidak melakukannya.
simbabque

Ini bekerja dengan baik! Thnak you
MikeD

@sababque Saya akan mengatakan itu sedikit tidak adil, saya telah menggunakannya dengan sukses di lingkungan produksi untuk dataset besar yang memerlukan manipulasi - memang kadang-kadang itu adalah mimpi buruk. Excel memang memiliki kebiasaan mengubah data dengan cara yang tidak terduga, tetapi saya tidak akan mengatakan risiko ini terutama lebih besar daripada pendekatan lain.
James Wood

Saya menggunakannya kadang-kadang juga, tetapi sebagian besar kali ini saya tidak suka melakukannya. Seringkali jauh lebih cepat untuk menggunakan editor teks yang mendukung pencarian regex & ganti jika ada yang tahu cara menanganinya. Namun, jangan tersinggung, karena jawaban Anda jelas dan singkat.
simbabque

Saya tidak tersinggung: D
James Wood

1

Notepad ++ memiliki pengeditan kolom bawaan dan perintah Line Up by (,) (plugin TextFX) yang memberikan solusi titik-dan-klik grafis yang mungkin pertama kali benar. Ini menghindari keharusan menggunakan ekspresi reguler atau pemrograman shell, yang keduanya biasanya memerlukan debugging sampai mereka melakukan apa yang Anda inginkan dan tidak lebih.

Titik awal : File CSV dengan kolom tidak selaras, sehingga tidak mudah diedit oleh kolom ...

    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
    ...

Prosedur:

  1. Pilih baris yang diminati - mungkin seluruh file.

  2. Gunakan perintah menu TextFX> Edit TextFX> Line up Multiple Lines by Comma (,) Baris ini semua baris dengan kolom dan membuat pengeditan kolom mudah.

    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
    
  3. Masuk ke Mode Kolom di kolom setelah koma pertama (,) Untuk sejumlah kecil baris, gunakan perintah keyboard: Alt + Shift + DownArrow.
    Jika perlu mengerjakan banyak baris (file besar), gunakan Alt + mouse dan klik kolom yang diinginkan dari baris pertama , kemudian pindah ke baris terakhir file dan Alt + Shift + klik posisi kolom yang sama. Ini mengaktifkan mode kolom pada file SELURUH - Anda akan melihat garis vertikal di belakang semua koma.

  4. Hapus dalam mode kolom menghapus seluruh kolom karakter. Jadi, Anda dapat menghapus semuanya sebelum koma pertama di semua baris sekaligus untuk mendapatkan:

    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
    

Selesai!

Komentar tentang solusi ini dibandingkan dengan berbagai yang lain yang disarankan sejauh ini:

Pengeditan Mode Kolom cukup kuat dan, ketika dikombinasikan dengan opsi plugin TextFX, berlaku untuk berbagai situasi dengan cara point-and-quick.

Misalnya, jika Anda memutuskan untuk menghapus kolom ke-2, atau kolom ke-N dengan cepat, pendekatan ini hampir tidak ada modifikasi.

Ekspresi reguler, skrip shell, di sisi lain, akan mencapai tujuan, ya, tetapi dalam masalah rumit Anda akan menghabiskan lebih banyak waktu "menghilangkan bug" sintaks Anda.

Fungsionalitas bawaan Notepad ++ yang serbaguna adalah salah satu kekuatan utamanya: Anda mendapatkan kekuatan yang cukup tanpa harus menggunakan "pemrograman".


0

Jika Anda terbiasa dengan plugin konsol Python untuk Notepad ++, saya dapat menyarankan Anda metode lain. Anda perlu menambahkan teks pada dokumen Notepad ++ dan menjalankan skrip berikutnya di konsol:

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')

Script ini menambahkan teks hasil ke dokumen Notepad ++ Anda saat ini.


-1

Jalankan vim(dalam mode perintah, jika tidak tekan Escape).

Ketik perintah berikut untuk memetakan tindakan menghapus kolom pertama ke qkunci:

:map q 0df,j0

Yang berarti:

  • 0 - pergi ke awal baris
  • df,- d apus semuanya sampai , karakter (termasuk tanda koma),
  • j - turun satu baris
  • 0 - pergi ke awal baris

Kemudian terapkan tindakan ini ke semua baris:

:0,$ normal q

Yang berarti, jalankan tindakan yang ditugaskan untuk kunci qdari garis awal (0) hingga akhir ($).


Mengapa tidak hanya melakukan satu penggantian global dengan :%s/^[^,]\+,//g?
Bicara

Anda bisa juga, yang satu ini mudah digunakan dan dimengerti daripada regex :) Biasanya saya selalu bingung karakter mana yang harus saya hindari, jadi saya berakhir dengan mengetikkan regex yang sama berkali-kali.
kenorb
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.