Как удалить двойные кавычки ("") в файле csv с помощью Python?

Мой ввод в файле csv выглядит следующим образом:

   “No”    “ename” age  “gender”   “salary”
    1   “aaa”   23     f          1000
    2   “bbb”   24     m          2000
    3   “ccc”   25    “f”         3000
    4   “ddd”   35     m          4000
    5   “eee”   27     f          5000

Ниже написан код для удаления кавычек, указанных в файле .csv.

import csv

csv.register_dialect('myDialect', delimiter=',', doublequote=False,
                     quoting=csv.QUOTE_NONE, skipinitialspace='True')

f = open("pythonFiles/normal.csv", 'r')

normal = csv.reader(f, dialect='myDialect')

for data in normal:
    print(data, len(data))

Результат показан ниже. Я хочу удалить все цитаты.

['“No”', '“ename”', 'age', '“gender”', '“salary”'] 
['1', '“aaa”', '23', 'f', '1000'] 
['2', '“bbb”', '24', 'm', '2000'] 
['3', '“ccc”', '25', '“f”', '3000'] 
['4', '“ddd”', '35', 'm', '4000'] 
['5', '“eee”', '27', 'f', '5000'] 

person tanu varshney    schedule 22.08.2018    source источник
comment
Вы не пишете в файл в своем коде? Вы перенаправили print в файл?   -  person roganjosh    schedule 22.08.2018
comment
Возможно quoting=csv.QUOTE_NONE не правильный вариант.   -  person Klaus D.    schedule 22.08.2018
comment
Похоже, в вашем диалекте используется разделитель пробелов, а кавычки не NONE, а причудливые кавычки.   -  person deceze♦    schedule 22.08.2018
comment
Проблема может заключаться в том, что ваш csv, похоже, не использует фактические кавычки, а скорее какую-то альтернативу Unicode.   -  person Sasha    schedule 22.08.2018
comment
@Jaxi Которые, ну, настоящие цитаты, просто… причудливые. :)   -  person deceze♦    schedule 22.08.2018
comment
@deceze да, это то, что я имел в виду :p   -  person Sasha    schedule 22.08.2018
comment
Это также может быть полезно?: stackoverflow.com/questions/28977618/   -  person Sasha    schedule 22.08.2018
comment
Запуск кода в Ubuntu и сохранение файла только в обычном режиме? Вы имели в виду цитаты, которые я должен сохранить каким-то другим способом?   -  person tanu varshney    schedule 22.08.2018
comment
Я думаю, что мы начинаем здесь не с той ноги. Этот файл csv не является файлом, содержащим значения, разделенные запятыми.   -  person Joshua Schlichting    schedule 22.08.2018
comment
@JoshuaSchlichting Я согласен. Я удивлен, что вывод соответствует заявленному, если установлено delimiter=','. Я ожидаю, что будет только один столбец, поскольку пробелы фактически используются в качестве разделителей во входных данных.   -  person André C. Andersen    schedule 22.08.2018


Ответы (2)


Может быть, вы могли бы просто использовать replace(...)?

for data in normal:
    data = [d.replace('“', '').replace('”', '') for d in data]
    print(data, len(data))

Вы также можете сделать lstrip(...) и rstrip(...), если хотите сохранить внутренние кавычки нетронутыми:

for data in normal:
    data = [d.lstrip('“').rstrip('”') for d in data]
    print(data, len(data))

Обратите внимание, что кавычки, которые вы используете, — это «левая двойная кавычка» () и «правая двойная кавычка» (), а не просто «двойная кавычка» (").

person André C. Andersen    schedule 22.08.2018

Вдохновленный ответом Андре выше, я изменил ваш код ниже

import csv

    csv.register_dialect('myDialect', delimiter=' ', doublequote=True,
                         quoting=csv.QUOTE_NONE, skipinitialspace='True')

    f = open("normal.csv", 'r')
    f = f.read().replace('“', '').replace('”', '').splitlines()
    normal = csv.reader(f, dialect='myDialect')

    for data in normal:
        print(data, len(data))

Если вас это устраивает, выберите ответ Андре как принятый. ваше здоровье.

person Darth_Sourav    schedule 22.08.2018