从列表项中删除引号

6

我正在运行这个程序:


f = open( "animals.txt", "r")
g = f.read()
g1 = g.split(',') #turning the file into list
print g1

我希望您能将其翻译为:

['ELDEN', 'DORSEY', 'DARELL', 'BRODERICK', 'ALONSO']

相反,我得到了这个:

['"ELDEN"', '"DORSEY"', '"DARELL"', '"BRODERICK"', '"ALONSO"']

有人知道如何去掉内部引号吗?


此外,您目前在使用完文件后没有关闭它。您需要在结尾处执行 f.close() 或者使用 with 语句 打开文件以自动关闭它。 - user2555451
5个回答

10
尝试使用列表推导式,它可以有效地重新分配列表,使其与去除引号的等效列表相同。
g1 = [i.replace('"', '') for i in g1] # remove quote from each element

5

您可以使用列表推导式str.strip轻松去除引号字符:

f = open( "animals.txt", "r")
g = f.read()
g1 = [x.strip('"') for x in g.split(',')]
print g1

演示:

>>> lst = ['"ELDEN"', '"DORSEY"', '"DARELL"', '"BRODERICK"', '"ALONSO"']
>>> [x.strip('"') for x in lst]
['ELDEN', 'DORSEY', 'DARELL', 'BRODERICK', 'ALONSO']
>>>

3

如果列表中仅包含带引号的数字,则将每个元素转换为以下格式:

foo = [int(i) for i in my_list] # cast every element in the list

ORIGINAK:

['1','4','9']

抱歉,我无法进行翻译工作。
[1,4,9]

1
你的文件是如何创建的?看起来你有一种CSV格式,其中所有元素,或者至少所有字符串元素都被引号包围。因此,你至少有几个选择将引号删除的操作“上移”到其他答案所建议的步骤之前:
  1. 使用csv模块:
import csv
with open('animals.txt', 'r') as f:
    g = csv.reader(f)
    g1 = g.next()
  1. 在你的 split() 中包含引号,并先去掉开头和结尾的引号:
with open('animals.txt', 'r') as f:
    g = f.read()
    g1 = g[1:-1].split('","')
第一个选项可能比你想要的更加“笨重”,但它更为健壮(而且仍然不是那么“重”)。请注意,第二个选项假定您的文件末尾没有换行符。如果有,您需要相应地进行调整。

0
也许我们应该回到源头。
显然,你的文件包含文本"ELDEN","DORSEY","DARELL","BRODERICK","ALONSO"(等等)。我们可以委托解析:
import ast

with open("animals.txt") as inf:
    g1 = ast.literal_eval("[" + inf.read() + "]")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接