您的列表不包含任何带单引号的字符串。我认为你混淆了repr()
字符串及其值的表示。
当您打印 Python 标准库容器(例如列表(或元组、集合、字典等))时,contents显示了这样一个容器的repr()
表示输出;这在调试时非常有用,因为它可以清楚地表明您拥有什么类型的对象。对于字符串,表示使用有效的 Python 字符串文字语法;您可以复制输出并将其粘贴到另一个 Python 脚本或交互式解释器中,您将获得完全相同的值。
例如,s
这是一个包含一些文本、一些引号字符和一个换行符的字符串。当我print字符串,换行符会导致打印一个额外的空行,但是当我使用repr()
,您将获得 Python 语法形式的字符串值,其中单引号是syntax,而不是值。请注意,换行符也显示为\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()
output.
所以在你的列表中,你的字符串没有'
字符作为值的一部分。它们是字符串语法的一部分。您只需更换"
人物,他们are值的一部分,因为它们位于最外面'...'
字符串文字语法。你可以使用str.replace('"', '')
删除它们:
[value.replace('"', '') for value in my_list]
或者,您可以使用str.strip() method仅删除值开头或结尾的引号:
[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
However,我看到您正在从您手动解析的制表符分隔文件中读取数据。您可以避免处理"
如果您使用的是csv.reader() object,配置为处理制表符作为分隔符。那个班自动地将处理引用的列:
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']