Заставьте CSV избежать двойных кавычек - PullRequest
0 голосов
/ 21 сентября 2018

Мне нужно подготовить файл .csv, чтобы программа, обрабатывающая его (ArcMap), игнорировала двойные кавычки.Арк смешивал содержимое всех следующих ячеек в этой строке с любой предыдущей, содержащей двойные кавычки.Например:

enter image description here

... и никакие дальнейшие строки не будут обработаны вообще.

Как сделать выход из CSVДвойные кавычки для успешной обработки в ArcMap (10.2)?

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Вы можете попробовать прочитать файл с помощью модуля csv и записать его обратно в надежде, что формат вывода будет более удобочитаемым для вашего другого инструмента.См. Документы для вариантов форматирования .

import csv
with open('in.csv', 'r') as fin, open('out.csv', 'w') as fout:
    reader = csv.reader(fin, delimiter='\t')
    writer = csv.writer(fout, delimiter='\t')
    # alternative:
    # writer = csv.writer(fout, delimiter='\t', escapechar='\\', doublequote=False)
    for line in reader:
        writer.writerow(line)
0 голосов
/ 30 ноября 2018

Что мне помогло, так это написание модуля для некоторой «предварительной обработки» файла CSV следующим образом.Ключевая строка - это место, где «писатель» имеет параметр «quoting = csv.QUOTE_ALL».Надеюсь, это полезно для других.

def work(Source_CSV):
    from __main__ import *
    import csv, arcpy, os

    # Derive name and location for newly-formatted .csv file
    Head = os.path.split(Source_CSV)[0]
    Tail = os.path.split(Source_CSV)[1]
    name = Tail[:-4]
    new_folder = "formatted"
    new_path = os.path.join(Head,new_folder)
    Formatted_CSV = os.path.join(new_path,name+"_formatted.csv")
    #arcpy.AddMessage("Formatted_CSV = "+Formatted_CSV)

    # Populate the new .csv file with quotation marks around all field contents ("quoting=csv.QUOTE_ALL")
    with open(Source_CSV, 'rb') as file1, open(Formatted_CSV,'wb') as file2:

        # Instantiate the .csv reader
        reader = csv.reader(file1, skipinitialspace=True)   

        # Write column headers without quotes
        headers = reader.next()  # 'next' function actually begins at the first row of the .csv.  
        str1 = ''.join(headers)
        writer = csv.writer(file2)
        writer.writerow(headers)

        # Write all other rows wrapped in double quotes
        writer = csv.writer(file2, delimiter=',', quoting=csv.QUOTE_ALL)

        # Write all other rows, at first quoting none...
        #writer = csv.writer(file2, quoting=csv.QUOTE_NONE,quotechar='\x01')

        for row in reader:
            # ...then manually doubling double quotes and wrapping 3rd column in double quotes.
            #row[2] = '"' + row[2].replace('"','""') + '"'
            writer.writerow(row) 

        return Formatted_CSV
0 голосов
/ 21 сентября 2018

Допустим, df - это DataFrame, созданный для файлов CSV следующим образом:

df = pd.read_csv('filename.csv')

Предположим, что comments - это имя столбца, в котором возникает проблема, т.е. вы хотите заменитькаждые двойные кавычки (") с нулевой строкой ().

Для вас это сделает следующий однострочный. Он заменит все двойные кавычки для каждой строки в df['comments'] пустой строкой.

df['comments'] = df['comments'].apply(lambda x: x.replace('"', ''))

Лямбда захватывает каждую строку в df['comments'] в переменной x.

РЕДАКТИРОВАТЬ: Чтобы избежать двойных кавычек, вам нужно преобразовать строку в ее необработанный формат. Снова еще один однострочныйаналогично приведенному выше.

df['comments'] = df['comments'].apply(lambda x: r'{0}'.format(x))

r перед строкой является экранированием для экранирования символов в python.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...