Notepad ++ - удаление первого столбца в файле, разделенном запятыми

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
MikeD
источник

Ответы:

13

Поиск и замена Notepad ++ поддерживает регулярные выражения (регулярные выражения), которые могут быть легко использованы для этого.

Используйте следующее регулярное выражение для поиска:

^[^,]+,(.+)

Это соответствует началу строки, за которым следует максимально возможное количество символов, не являясь запятой, за которой следует запятая, за которой следует остальная часть строки. Остальная часть строки сгруппирована как первое совпадение.

Глобально заменить на это:

\1

Это обозначает первый субматч (остаток строки). При этом каждая строка заменяется всем после первого столбца и запятой.

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


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

speakr
источник
Это путь сюда. Если у ОП уже есть N ++, это самый быстрый способ. Я делаю это много с PSPad (который мог бы сделать это за один раз, кстати). Также проверьте, как работает регулярное выражение: rubular.com/r/OiehkBT0vA
simbabque
Notepad ++ обрабатывает ввод не построчно, а посимвольно. Это имеет некоторые полезные преимущества (например, многострочные шаблоны).
Деннис
+1 за редактирование. К сожалению, ваш ответ вики-сообщества сейчас.
Деннис
@ Денис Да, я редактировал слишком часто, так как я не знал о пределе 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 для команды

Sriniv
источник
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, принадлежащем Bmatzelle. Cygwin также может быть вариантом, но это слишком для этой штуки
Journeyman Geek
2

Вы должны быть в состоянии загрузить CSV в Excel и сделать так, чтобы числа воспринимались как текст (не позволяя преобразовать их в научные числа).

  1. Открыть Excel
  2. Вкладка данных
  3. Из текста
  4. Выберите с разделителями
  5. Выберите Другое: ","
  6. Для всех столбцов выберите их в окне предварительного просмотра данных и выберите «Текст»
  7. Удалить вашу колонку
  8. Сохранить как CSV
Джеймс Вуд
источник
Редактирование и сохранение CSV-файлов в Excel часто разбивает числа, такие как коды EAN и значения в американском стиле в европейском Excel. Даже если вы все настроили при импорте, это может съесть некоторые вещи. Я не могу рекомендовать это, хотя это вероятно работало бы. В продуктивной среде я советую против этого.
simbabque
Это сработало отлично! Спасибо
MikeD
@ simbabque Я бы сказал, что это немного несправедливо, я успешно использовал его в производственных средах для больших наборов данных, которые требовали манипуляций - правда, иногда это был кошмар. Excel имеет привычку изменять данные неожиданными способами, но я бы не сказал, что этот риск был особенно выше, чем другие подходы.
Джеймс Вуд
Я также использую это время от времени, но в большинстве случаев я не люблю это делать. Часто гораздо быстрее использовать текстовый редактор, который поддерживает поиск и замену регулярных выражений, если кто-то знает, как с этим справиться. Не обижайся, так как твой ответ был четким и лаконичным.
simbabque
Ой не обиделся: D
Джеймс Вуд
1

Notepad ++ имеет встроенное редактирование столбцов и команду Line Up by (,) (плагин 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> Line Up Multiple Lines by Comma (,) Это выравнивает все строки по столбцам и упрощает редактирование столбцов.

    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 + щелкните по той же позиции столбца. Это активирует режим столбцов для всего файла - вы должны увидеть вертикальную линию за всеми запятыми.

  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) до конца ($).

kenorb
источник
Почему бы не сделать единственную глобальную замену :%s/^[^,]\+,//g?
спикер
Вы могли бы также, этот простой в использовании и понять, а не регулярное выражение :) Обычно я всегда путаюсь, какой символ я должен избежать, поэтому я заканчиваю вводить одно и то же регулярное выражение много раз.
Кенорб