Notepad ++ - Virgülle ayrılmış dosyadaki ilk sütunu kaldırma


14

İlk veri sütununu kaldırmak için gereken büyük bir CSV dosyası var. Excel'de sütunları açamıyorum çünkü sütunlardaki bazı değerleri bilimsel sayılara dönüştürüyor.

Notepad ++ kullanıyorum ve EXE dosyasından ilk sütunu dizmeye çalışıyorum,

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

benzemek

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

Yanıtlar:


13

Notepad ++ 'ın arama ve değiştirme, bunun için kolayca kullanılabilen düzenli ifadeleri (regex) destekler.

Aramak için aşağıdaki normal ifadeyi kullanın:

^[^,]+,(.+)

Bu, satırın başlangıcını, ardından virgül olmamak ve ardından satırın geri kalanını takip etmek için mümkün olduğunca çok karakterle eşleşir. Satırın geri kalanı ilk alt grup olarak gruplanır.

Global olarak bununla değiştirin:

\1

Bu, ilk gönderimi (satırın geri kalanını) gösterir. Bununla, her satır ilk sütun ve virgülten sonraki her şeyle değiştirilir.

Tek bir küresel yerine bunu yapmak için yukarıdaki yolu bulduktan (ve buna göre cevabımı güncelledikten) sonra, bu cevabın temel olarak aynı olduğunu, ancak kullanılan normal ifadenin kapsamlı bir açıklamasını verdiğini fark ettim .


Not:^[^,]+, Notepad ++ daha sonra sonuncu hariç tüm sütunları değiştireceğinden, daha kısa normal ifade boş bir dize ile global değiştirme için kullanılamaz: İlk sütunu değiştirdikten sonra, ikinci sütun (şimdi ilk olan ve tam olarak normal ifadeyle eşleşen) değiştirilir, sonra üçüncü olur, vb. Bununla birlikte, daha kısa normal ifade diğer editörlerle (örneğin PSPad veya vim ile ) mükemmel şekilde çalışır .


Buraya gitmenin yolu bu. OP zaten N ++ 'a sahipse, bu en hızlı yoldur. PSPad ile bunu çok yapıyorum (tek seferde bunu yapabilir, btw). Ayrıca normal ifadenin nasıl çalıştığını da kontrol edin: rubular.com/r/OiehkBT0vA
simbabque

Notepad ++, girişi satır satır değil, karakter karakter olarak işler. Bunun bazı avantajları var (çok satırlı desenler gibi).
Dennis

Düzenleme için +1. Ne yazık ki, cevabınız şimdi topluluk wiki.
Dennis

@Dennis Evet, 10 düzenleme sınırının farkında olmadığım için çok sık düzenleme yaptım.
speakr

Neden olmasın ^[^,]+,ve boş ile değiştirilsin?
knittl

10

Ctrl+ Tuşuna basın Hve aşağıdaki değiştirme işlemini gerçekleştirin:

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

Şimdi tüm tekrarlamaları değiştirmek için Alt+ tuşuna basın A.

Nasıl çalışır

  • Düzenli ifade .*?,(.*) bütün bir satırı ile eşleşir:

    • .*?, virgül dahil olmak üzere ilk virgülden önceki her şeyle eşleşir.

      .*herhangi bir karakterin herhangi bir sayıda geçtiği anlamına gelir ve soru işareti niceleyiciyi tembelleştirir , yani mümkün olduğunca az karakterle eşleşir.

    • (.*) ilk virgülden sonra her şeyle eşleşir.

      .*Parantez içine alınması onu bir alt kalıba dönüştürür, böylece direğe değiştirme alanında erişilebilir.

  • \1ilk eşlemeyi (eşleşme (.*)) temsil eder .

    Sonuç olarak, Notepad ++ satırı ilk virgülün ardından gelen her şeyle değiştirir.


Sadece boş bir dize ile değiştirilen Notepad ++ ile çalışmaz fark ettikten sonra aynı fikir var ^[^,]+,. (+1)
speakr

6

Windows'da bunu aşağıdaki gibi yapabilirsiniz.

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

Sadece 6 sütununuz olduğunu varsaydım. Daha fazla sütununuz varsa belirteçler alanında * ile deneme yapmayı deneyin. Komut için Windows'dan fikir alınır


2
rasgele sütun sayısı için şunu kullanın:for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv
SeanC

3

Eğer bir Linux sistemi veya bazı Unix tarzı ortamına sahip varsayarsak (ben gibi Gow veya kapalı yardımcı programları Snarf olabilir unixutils İçinden dosyayı çalıştıran inanmak) cut -d , -f2-6olması gerektiği, ben hile olacaktır eğer doğru geri çağırmak - - hile yapmak gerekir -dsetleri ve f2-6ikinci ile 6. karakter arasındaki karakterleri yazdırır.

cat input.csv | cut -d , -f2-6 > output.csvgirdi dosyasını alıp bir çıktı dosyasını dışarı atmak için hile yapar. Onun not defteri kullanmıyor, ama hızlı ve gerçekten basit.


Teşekkürler, sadece bağlantıyı tıkladım ve 403 hatası aldım?
MikeD

her iki bağlantı benim için çalışıyor - ki bu garip. Genellikle bunun için googling gow bulmak - onun bmatzelle ait bir github repo üzerinde. Cygwin de bir seçenek olabilir, ama bu sorta şey için bir overkill
Journeyman Geek

2

CSV'yi excel'e yükleyebilmeli ve sayıları metin olarak ele almasını sağlayabilmelisiniz (bilimsel sayılara dönüşmesini engelleyin).

  1. Excel'i aç
  2. Veri Sekmesi
  3. Metinden
  4. Sınırlandırılmış'ı seçin
  5. Diğer'i seçin: ","
  6. Tüm sütunlar için bunları Veri Önizleme penceresinde seçin ve Metin'i seçin
  7. Sütununuzu kaldırın
  8. CSV olarak kaydet

CSV dosyalarını Excel'de düzenlemek ve kaydetmek, Avrupa Excel'deki EAN kodları ve ABD tarzı kayan reklamlar gibi sayıları sık sık keser. İçe aktarırken her şeyi ayarlasanız bile, bazı şeyleri yiyor. Muhtemelen işe yarayacak olsa, bunu tavsiye edemez. Verimli bir ortamda, ona karşı tavsiyede bulunacağım.
simbabque

Bu harika çalıştı! Thnak you
MikeD

@simbabque Bunun biraz haksız olduğunu söyleyebilirim, manipülasyon gerektiren büyük veri kümeleri için üretim ortamlarında başarılı bir şekilde kullandım - kuşkusuz kabus gibiydi. Excel'in verileri beklenmedik şekillerde değiştirme alışkanlığı var, ancak bu riskin özellikle diğer yaklaşımlardan daha büyük olduğunu söyleyemem.
James Wood

Ben de arada sırada kullanıyorum, ama çoğu zaman bunu yapmaktan hoşlanmıyorum. Regex aramayı ve değiştirmeyi destekleyen bir metin düzenleyiciyi kullanmak, nasıl ele alınacağını bilirse genellikle çok daha hızlıdır. Cevabınız açık ve öz olduğu için, hiçbir suç yok.
simbabque

oi değildi suç: D
James Wood

1

Notepad ++ yerleşik sütun düzenleme ve Line Up by (,) komutuna (TextFX eklentisi) sahiptir ve ilk seferde doğru olması muhtemel bir grafik işaretleme ve tıklama çözümü sunar. Bu, düzenli ifadeler veya kabuk programlama kullanmak zorunda kalmaz, her ikisi de tam olarak ne istediğinizi ve daha fazlasını yapana kadar bazı hata ayıklama gerektirir.

Başlangıç ​​noktası : Sütunları yanlış hizalanmış CSV dosyası, bu yüzden sütunla düzenlemek kolay değil ...

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

Prosedür:

  1. İlgilenilen satırları seçin - belki de tüm dosyayı.

  2. TextFX> TextFX Edit menü komutunu kullanın> Virgülle Birden Çok Satır Çizgisi (,) Bu, tüm satırları sütuna göre sıralar ve sütun düzenlemeyi kolaylaştırır.

    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. İlk virgülden sonraki sütuna Sütun Moduna girin (,) Az sayıda satır için klavye komutlarını kullanın: Alt + Shift + DownArrow.
    Birçok satırda (büyük dosya) çalışmanız gerekiyorsa, Alt + fareyi kullanın ve ilk satırın istediğiniz sütununu tıklayın , ardından dosyanın son satırına gidin ve Alt + Shift + aynı sütun konumunu tıklayın. Bu, ENTIRE dosyasındaki sütun modunu etkinleştirir - tüm virgüllerin arkasında dikey bir çizgi görmelisiniz.

  4. Sütun modunda sil , tüm karakter sütununu kaldırır. Böylece, ilk virgülden önceki her şeyi tüm satırlarda bir kerede silebilirsiniz:

    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
    

Bitti!

Şimdiye kadar önerilen çeşitli çözümlerle karşılaştırıldığında bu çözüme dikkat edin:

Sütun Modu düzenleme oldukça güçlüdür ve TextFX eklenti seçenekleriyle birleştirildiğinde çeşitli durumlar için hızlı ve hızlı bir şekilde uygulanır.

Örneğin, 2. sütunu veya N. Sütunu hızlı bir şekilde silmeye karar verdiyseniz, bu yaklaşım neredeyse hiç değişiklik yapılmadan çalışır.

Diğer yandan düzenli ifadeler, kabuk komut dosyaları hedefe ulaşacaktır, ancak karmaşık sorunlarda sözdiziminizin "hata ayıklamasını" yapmak için daha fazla zaman harcayacaksınız.

Notepad ++ 'ın çok yönlü yerleşik işlevselliği temel güçlerinden biridir: "programlama" ya başvurmak zorunda kalmadan biraz güç elde edersiniz.


0

Aşina Eğer varsa Python konsolu eklentisi Notepad ++, sana başka bir yöntem tavsiye edebilir. Metninizi Notepad ++ belgesine eklemeniz ve konsoldaki bir sonraki komut dosyasını yürütmeniz gerekir:

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

Bu komut dosyası, sonuç metnini geçerli Notepad ++ belgenize ekledi.


-1

Çalıştır vim(komut modunda, değilse Escape tuşuna basın).

İlk sütunu kaldırma eylemini qanahtara eşlemek için aşağıdaki komutu yazın :

:map q 0df,j0

Bunun anlamı:

  • 0 - satırın başına git
  • df,- d elete her şey kadar , karakteri (virgül dahil),
  • j - bir satır aşağı git
  • 0 - satırın başına git

Ardından bu işlemi tüm satırlara uygulayın:

:0,$ normal q

Bu, anahtara q(0) sondan ($) kadar olan tuşa atanan eylemi çalıştırır .


Neden sadece tek bir küresel yerine geçmiyoruz :%s/^[^,]\+,//g?
speakr

Sen de olabilir, bu regex yerine kullanımı ve anlaşılması kolaydır :) Genellikle hangi karakteri kaçmam gerektiğini her zaman kafam karıştı, bu yüzden aynı regex'i birçok kez yazmaya son veriyorum.
kenorb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.