Как заменить одинарные кавычки из списка в Python - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть список:

my_list = ['"3"', '"45"','"12"','"6"']

Этот список содержит одинарные и двойные кавычки и значение элемента.Как я могу заменить одинарные или двойные кавычки из каждого элемента.Я попробовал ниже, но результаты такие же:

my_list = [i.replace("''", " ") for i in my_list]

Ответы [ 3 ]

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

Вы можете использовать split:

[x.split('"')[1] for x in my_list]

или можете использовать:

[x.strip('"') for x in my_list]
0 голосов
/ 14 сентября 2018

Ваш список не содержит строк с одинарными кавычками.Я думаю, вы путаете представление repr() строк с их значениями.

Когда вы печатаете контейнер стандартной библиотеки Python, такой как список (или кортеж, набор, словарь и т. Д.), Тогда содержимое такого контейнера показано в виде вывода repr();это замечательно при отладке, потому что она проясняет, какой тип объектов у вас есть.Для строк представление использует допустимый строковый буквенный синтаксис Python;вы можете скопировать вывод и вставить его в другой скрипт Python или в интерактивный интерпретатор, и вы получите точно такое же значение.

Например, s - это строка, содержащая некоторый текст, некоторые символы кавычеки символ новой строки.Когда я печатаю строку, символ новой строки приводит к печати дополнительной пустой строки, но когда я использую repr(), вы получаете строковое значение в синтаксической форме Python, где одинарные кавычки являются частью синтаксис , а не значение.Обратите внимание, что символ новой строки также отображается с синтаксисом \n, точно так же, как когда я создал строку s на первом месте:

>>> s = 'They heard him say "Hello world!".\n'
>>> print(s)
They heard him say "Hello world!".

>>> print(repr(s))
'They heard him say "Hello world!".\n'
>>> s
'They heard him say "Hello world!".\n'

И когда я повторил значение sв конце, интерактивный интерпретатор также показывает мне значение, используя вывод repr().

Так что в вашем списке ваши строки не содержат символов ' как часть значения.Они являются частью строкового синтаксиса.Вам нужно всего лишь заменить " символы, они являются частью значения, поскольку они находятся внутри самого внешнего '...' строкового литерального синтаксиса.Вы можете использовать str.replace('"', ''), чтобы удалить их:

[value.replace('"', '') for value in my_list]

, или вы можете использовать str.strip() метод , чтобы удалить только кавычки, которые находятся в начале или конце значения:

[value.strip('"') for value in my_list]

Оба отлично работают для вашего списка образцов:

>>> my_list = ['"3"', '"45"','"12"','"6"']
>>> [value.replace('"', '') for value in my_list]
['3', '45', '12', '6']
>>> [value.strip('"') for value in my_list]
['3', '45', '12', '6']

Опять же, символы ' не являются частью значения:

>>> first = my_list[0].strip('"')
>>> first         # echo, uses repr()
'3'
>>> print(first)  # printing, the actual value written out
3
>>> len(first)    # there is just a single character in the string
1

Однако , я видел, что вы читаете свои данные из файла, разделенного табуляцией, который вы анализируете вручную.Вы можете полностью избежать кавычек ", если вместо этого используете объект csv.reader() , настроенный для обработки вкладок в качестве разделителя.Этот класс автоматически будет обрабатывать столбцы в кавычках:

import csv

with open(inputfile, 'r', newline='') as datafile:
    reader = csv.reader(datafile, delimiter='\t')
    for row in reader:
        # row is a list with strings, *but no quotes*
        # e.g. ['3', '45', '12', '6']

Демонстрация, показывающая, как csv.reader() обрабатывает кавычки:

>>> import csv
>>> lines = '''\
... "3"\t"45"\t"12"\t"6"
... "42"\t"81"\t"99"\t"11"
... '''.splitlines()
>>> reader = csv.reader(lines, delimiter='\t')
>>> for row in reader:
...     print(row)
...
['3', '45', '12', '6']
['42', '81', '99', '11']
0 голосов
/ 14 сентября 2018

Как предлагает @MartijnPieters в комментариях, вы можете использовать замену в строках, чтобы получить желаемый результат.

Изменение, которое я хотел бы предложить, заключается в том, чтобы использовать .replace('"', '') вместо .replace('"', ' ').В противном случае результирующие строки будут иметь начальный и конечный пробелы

. Вы можете использовать понимание списка, чтобы иметь дело со списком, который у вас есть, как этот

my_list = ['"3"', '"45"','"12"','"6"']

new_list = [x.replace('"', '') for x in my_list]

print(new_list) # ['3', '45', '12', '6']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...