2 Вопрос: удалить ненужные кавычки и запятую в CSV-файле [дубликат]

вопрос создан в Thu, May 2, 2019 12:00 AM
    

На этот вопрос уже есть ответ здесь:

    

Мне нужно удалить ненужные кавычки и запятые из CSV-файла. Пример данных, как показано ниже

header1, header2, header3, header4
1,       "ABC",   BCD,     "EDG",GHT\2\TST"

В последнем столбце есть несколько значений свободного текста, которые выглядят как новый столбец, но в Excel они открываются, а затем выглядят так

EDG",GHT\2\TST

Пожалуйста, помогите мне исправить этот последний столбец.

пробовал это -

sed 's/","/|/g' $filename | sed 's/|",/||/g' | sed 's/|,"/|/g' | sed 's/",/ /g' | sed 's/^.//' | awk '{print substr($0, 1, length($0)-1)}' | sed 's/,/ /g' | sed 's/"/ /g' | sed 's/|/,/g' > "out_"$filename
    
- 1
  1. Не могли бы вы поделиться, как вы хотите, чтобы последний столбец выглядел?
    2019-05-02 15: 08: 15Z
  2. это не похоже на действительный файл CSV
    2019-05-02 15: 08: 57Z
  3. Последнее значение столбца должно выглядеть как EDG GHT \2 \TST после удаления кавычек и запятой, чтобы я мог загрузить его в Hive
    2019-05-02 15: 14: 47Z
  4. Я предполагал, что это исходит из кадра данных панд, но, возможно, это не так. Это просто файл? Я думаю, что вы можете сказать Excel, чтобы использовать разделитель табуляции, а не запятую, и он должен читать это правильно?
    2019-05-02 15: 25: 19Z
2 ответа                              2                         

это должно найти " или , из столбцов и заменить его ничем

df = df.str.replace('[",]','',regex=True)
    
0
2019-05-02 15: 18: 46Z
  1. Но это может заменить действительное значение из значения заголовка 2 столбца "ABC", которое я не хочу, я только хочу, чтобы это заменить из любого значения, которое уже внутри "", как "EDG", GHT \2 \TST ", а не как" ABC ",
    2019-05-02 15: 23: 58Z
  2. Тогда это просто вопрос получения правильного регулярного выражения? Я не так хорош в регулярных выражениях, так что это не так просто для меня.
    2019-05-02 15: 38: 50Z
  3. это регулярное выражение работает? "("|,)[.]*
    2019-05-02 15: 45: 11Z
  4. Можно использовать с помощью комбинации sed и awk, как показано ниже `` `sed 's /", "/| /g' $filename | sed 's /| ", /|| /g' | sed 's /|," /| /g' | sed 's /", //​​g' | sed 's /^.//' | awk '{print substr ($0, 1, длина ($0) -1)}' | sed 's /, //​​g' | sed 's /"//g' | sed 's /| /, /g' > "out _" $filename `` `
    2019-05-10 18: 52: 12Z

Вы можете сделать это следующим образом:

with open("data.txt", "r") as f:
        for line in f.readlines():
                columns = line.split(", ") # Split by ", "
                columns[3] = "".join(columns[3:]) # Merge columns 4 to ... last
                columns[3] = columns[3].replace("\"", "").replace(",", "")` # Removing unwanted characters
                del columns[4:] # Remove all unnecessary columns

                print("%s | %s | %s | %s" % (columns[0], columns[1], columns[2], columns[3]))

Мой файл data.txt:

1, "ABC", BCD, "EDG",GHT\2\TST"
2, "CBA", DCB, "GDV",DHZ,\2RS"

Вывод:

1 | "ABC" | BCD | EDGGHT\2\TST

2 | "CBA" | DCB | GDVDHZ\2RS

Это решение будет работать, если только последний столбец содержит запятые.

    
0
2019-05-02 15: 30: 36Z
  1. Спасибо Тео за помощь, но такие значения могут быть в любом столбце в файле csv
    2019-05-02 15: 32: 49Z
  2. Таким образом, вы не можете определить, какой столбец является каким столбцом ... CSV-файл использует запятые для разделения столбцов. Может быть, вы можете добавить escape для запятой перед экспортом данных?
2019-05-02 15: 38: 18Z
  • Это правильно. Когда я открываю csv в MS Excel, он открывает его правильно и может показать мне, какой столбец какой, но когда я загружаю этот csv во внешнюю таблицу Hive с использованием opencsv serde, тогда значения сдвигаются из-за нежелательных ", комбинация.
    2019-05-02 15: 42: 14Z
  • Некоторые системы используют , (запятая и пробел) для разделения столбцов, всегда ли это ваш случай?
    2019-05-03 08: 48: 37Z
  • Разделяется только запятой.
    2019-05-03 13: 08: 54Z
  • источник размещен Вот