Блокнот ++ - Видалення першого стовпця у файлі, розділеному комами


14

У мене великий файл CSV, з якого мені потрібно видалити перший стовпець даних. Я не можу відкрити його в Excel, оскільки 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

Відповіді:


13

Пошук і заміна Notepad ++ підтримує регулярні вирази (регулярні вирази), які можна легко використати для цього.

Для пошуку:

^[^,]+,(.+)

Це відповідає початку рядка, за яким слід якомога більше символів, не ставши комою, а за комою - решта рядка. Решта рядка групується як перший підматч.

Глобально замініть це:

\1

Це позначає перший підматч (решта рядка). При цьому кожен рядок замінюється всім після першого стовпця і коми.

Після того, як я знайшов вищезазначений спосіб зробити це в одній глобальній заміні (і відповідно оновив свою відповідь), я помітив, що ця відповідь в основному однакова, але також дає вичерпне пояснення використовуваного регулярного виразу.


Примітка: Більш короткий регулярний вираз ^[^,]+,не може бути використаний для глобальної заміни порожнім рядком, оскільки Notepad ++ замінить усі стовпці, окрім останнього: Після заміни першого стовпця другий стовпець (який зараз є першим і відповідає точно регексу) бути заміненим, потім третім тощо. Однак коротший регулярний вираз ідеально працює з іншими редакторами (наприклад, з PSPad або vim ).


Це шлях сюди. Якщо в ОП вже є N ++, це найшвидший спосіб. Я роблю це багато з PSPad (який міг би зробити це за один раз, btw). Ознайомтеся
simbabque

Блокнот ++ не обробляє вхідний рядок, а символ за символом. Це має деякі акуратні переваги (як багатолінійні візерунки).
Денніс

+1 для редагування На жаль, ваша відповідь зараз - вікі спільноти.
Денніс

@Dennis Так, я редагував занадто часто, оскільки не знав обмеження в 10 редагувань.
лектор

Чому б ^[^,]+,і не замінити порожнім?
knittl

10

Натисніть Ctrl+ Hі виконайте таку заміну:

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

Тепер натисніть Alt+, Aщоб замінити всі події.

Як це працює

  • Регулярний вираз .*?,(.*) відповідає цілої рядку:

    • .*?, відповідає всім перед першою комою, включаючи саму кому.

      .*означає будь-яку кількість випадків будь-якого символу, і знак питання робить квантор ледачим , тобто він відповідає якомога менше символів.

    • (.*) відповідає всім після першої коми.

      Замикання .*в круглих дужках перетворює його в підпакет, тому щогла може бути доступною в полі заміни.

  • \1являє собою перший підматч (матч для (.*)).

    Як результат, Notepad ++ замінює рядок усім, що слідує за першою комою.


Просто отримав таку ж думку, помітивши, що ^[^,]+,глобально замінена порожня рядок не працюватиме в Notepad ++. (+1)
виступ

6

У 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 для команди


2
для довільної кількості стовпців використовуйте це:for /F "tokens=1* delims=," %i in (Input.csv) do @echo %j >> output.csv
SeanC

3

Якщо припустити, що у вас є система Linux або якесь середовище стилю Unix (мені подобається gow , або ви можете вирвати утиліти від unixutils ) Я вважаю, що запуск файлу через це cut -d , -f2-6повинен зробити трюк - він повинен, якщо я пригадаю правильно, зробить трюк - -dвстановлює значення розмежувач і f2-6друкує другий-шостий символи.

cat input.csv | cut -d , -f2-6 > output.csvзробив би трюк, взявши вхідний файл і витіснивши вихідний файл. Він не використовує блокнот, але його швидкий і дуже простий.


Дякую, я просто натиснув на посилання, і я отримав помилку 403?
MikeD

обидві посилання працюють на мене - що є вірніше. Я, як правило, підхоплюю до нього гуглінг - його на github repo, що належить bmatzelle. Cygwin також може бути варіантом, але його надмір для цієї речі
Journeyman Geek

2

Ви повинні мати змогу завантажити CSV у excel та надати йому цифри розглядати як текст (заважаючи перетворювати його на наукові числа).

  1. Відкрийте Excel
  2. Вкладка даних
  3. З тексту
  4. Виберіть Розмежування
  5. Виберіть інше: ","
  6. Для всіх стовпців виберіть їх у вікні попереднього перегляду даних та виберіть Текст
  7. Видаліть свій стовпець
  8. Зберегти як CSV

Редагування та збереження файлів CSV в Excel часто розбиває числа, наприклад, EAN-коди та плаваючі в американському стилі плавці в європейському Excel. Навіть якщо ви налаштовуєте все під час імпорту, трапляється з'їсти деякі речі. Я не можу рекомендувати його, хоча це, мабуть, спрацює. У продуктивних умовах я дам поради проти цього.
simbabque

Це спрацювало чудово! Thnak you
MikeD

@simbabque Я б сказав, що це несправедливо, я успішно використовував це у виробничих середовищах для великих наборів даних, які потребували маніпуляцій - правда, часом це був кошмар. У Excel є звичка змінювати дані несподіваними способами, але я б не сказав, що цей ризик був особливо більшим, ніж інші підходи.
Джеймс Вуд

Я також користуюсь її при нагоді, але більшість цих разів мені не подобається це робити. Часто набагато швидше використовувати текстовий редактор, який підтримує пошук і заміну регулярних виразів, якщо хтось знає, як з цим впоратися. Однак без образи, оскільки ваша відповідь була чіткою та стислою.
simbabque

oi не ображався: D
Джеймс Вуд

1

Notepad ++ має вбудоване редагування стовпців та команду Line Up за допомогою команди (,) (плагін 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
    ...

Порядок:

  1. Виберіть цікаві рядки - можливо, весь файл.

  2. Використовуйте команду меню 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
    
  3. Увійдіть у режим стовпця у стовпці після першої коми (,) Для невеликої кількості рядків використовуйте команди клавіатури: Alt + Shift + DownArrow.
    Якщо вам потрібно працювати над багатьма рядками (великий файл), використовуйте клавішу Alt + та клацніть потрібний стовпець першого рядка, потім перейдіть до останнього рядка файлу та Alt + Shift + натисніть на ту саму позицію стовпця. Це активує режим стовпця у файлі ENTIRE - ви повинні бачити вертикальну лінію за всіма комами.

  4. Видалити в режимі стовпців видаляє цілий стовпець символів. Таким чином, ви можете видалити все до першої коми з усіх рядків відразу, щоб отримати:

    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 ++ є однією з його головних переваг: ви отримуєте досить багато енергії, не вдаючись до "програмування".


0

Якщо ви знайомі з плагіном консолі Python для Notepad ++, я можу порадити вам інший метод. Потрібно додати текст у документ 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 ++.


-1

Виконати vim(у командному режимі, якщо не натиснути Escape).

Введіть таку команду, щоб зіставити дію видалення першого стовпця до qключа:

:map q 0df,j0

Що означає:

  • 0 - перейти до початку рядка
  • df,- d вибери все до , символ (включаючи кому),
  • j - спуститися на одну лінію
  • 0 - перейти до початку рядка

Потім застосуйте цю дію до всіх рядків:

:0,$ normal q

Що означає, виконайте дію, яка призначена ключу qвід рядка від початку (0) до кінця ($).


Чому б просто не зробити одну глобальну заміну :%s/^[^,]\+,//g?
лектор

Ви можете також, цей простий у використанні та зрозуміліший, а не регулярний вираз :) :) Зазвичай я завжди плутаюсь, до якого персонажа я можу втекти, тому закінчую вводити той самий регулярний вираз багато разів.
kenorb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.