Удалите CRLF на полпути через поле из данных, считанных как файл данных .CSV, замените на «||» - PullRequest
0 голосов
/ 15 апреля 2020

Я читаю строки данных, разделенных запятыми, в windows OS, с python 3.8.2.

Некоторые поля имеют встроенный CRLF на полпути, как в этой конкретной записи, которая имеет многострочный данные, такие как:

"John SmithCRLFJaneDoe"

Данные в источнике были введены как:

"John Smith
Jane Doe"

Когда я читаю эту строку и хочу преобразовать ее в строку Я получаю str = "John Smith", так как синтаксический анализатор прерывает CRLF.

Поэтому я пытаюсь заменить CRLF на полпути другим символом:

with open('bogus_line.csv', 'r') as MyLine:
    str = MyLine.read()
    print (str)  
    raw_string = str.replace('\\r\\n'," || ")
    print (raw_string)   # the problem is is generating the correct raw string format???

Производит :

"John Smith
Jane Doe"
"John Smith
Jane Doe"

Но я хотел бы:

"John Smith
Jane Doe"
"John Smith || Jane Doe"

Ниже не работает, возвращая ошибку:

with open('bogus_line.csv', 'r') as MyLine:
    str = MyLine.read()
    print (str)  
    raw_string = r'str.replace('\\r\\n'," || ")
    print (raw_string)

Вы ожидаете, что ниже будет работать, но он проходит как в первом примере, завершая, но не объединяя две строки:

with open('bogus_line.csv', 'r') as MyLine:
    str = MyLine.read()
    print (str)  
    raw_string = r"{}".format(str).replace('\\r\\n'," || ")
    print (raw_string)

Производит:

"John Smith
Jane Doe"
"John Smith
Jane Doe"

Ответы [ 2 ]

1 голос
/ 15 апреля 2020

Обычный способ - использовать модуль csv, который знает о новых строках, встроенных в поля в кавычках:

import csv

with open('bogus_line.csv', 'r') as MyLine:
    rd = csv.reader(MyLine)
    str = next(rd)[0]    # a reader is an iterator on lists of fields
    print (str)  
    raw_string = r"{}".format(str).replace('\\r\\n'," || ")
    print (raw_string)
0 голосов
/ 16 апреля 2020

мне удалось сделать эту работу, но это немного сложно. Вы должны удалить \ n, а затем \ r отдельно! не спрашивай меня почему или как. но, похоже, это работает на платформе windows 10: сначала удалите символ новой строки, заменив его пробелом; затем удалите возврат каретки.

raw_string = str.replace('\n', ' ').replace('\r', '')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...