Ваш список не содержит строк с одинарными кавычками.Я думаю, вы путаете представление 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']