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

8 ответов8

13

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

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

^[^,]+,(.+)

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

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

\1

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

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


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

10

Нажмите Ctrl + H и выполните следующую замену:

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

Теперь нажмите Alt + A, чтобы заменить все вхождения.

Как это устроено

  • Регулярное выражение .*?,(.*) соответствует всей строке:

    • .*?, соответствует всему до первой запятой, включая саму запятую.

      .* означает любое количество вхождений любого символа, а вопросительный знак делает квантификатор ленивым, т. е. соответствует как можно меньшему числу символов.

    • (.*) соответствует всему после первой запятой.

      Заключение в скобки .* Преобразует его в подшаблон, поэтому в поле замены можно получить доступ к мачте.

  • \1 представляет первое совпадение (соответствует (.*)).

    В результате Notepad++ заменяет строку всем, что следует за первой запятой.

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

3

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

cat input.csv | cut -d , -f2-6 > output.csv добьется цели , взяв входной файл и выбив выходной файл. Он не использует блокнот, но он быстрый и очень простой.

2

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

  1. Открыть Excel
  2. Вкладка данных
  3. Из текста
  4. Выберите с разделителями
  5. Выберите Другое: ","
  6. Для всех столбцов выберите их в окне предварительного просмотра данных и выберите «Текст»
  7. Удалить вашу колонку
  8. Сохранить как CSV
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 df, - D Elete все до , символ (включая запятую),
  • j - спуститься на одну строку
  • 0 - перейти к началу строки

Затем примените это действие ко всем строкам:

:0,$ normal q

Это означает, что запустите действие, назначенное клавише q от строки начало (0) до конца ($).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .