在Python中写入列表时从文本中删除引号外部

时间:2015-01-30 21:19:03

标签: python string list

我有一个文件文件,当打开文件时看起来像这样:

'element1', 'element2', 'element3', 'element4'

然后我使用列表推导将其读入列表

thelist = [line.strip() for line in open('file.txt', 'r')]

但是列表看起来像这样,只有一个元素在索引0

["'element1', 'element2', 'element3', 'element4'"]

由于双引号被附加到第一个和最后一个元素的末尾,因此python认为它是单个元素列表。有没有办法在列表推导中使用“strip()”来删除那些外部双引号?

1 个答案:

答案 0 :(得分:1)

你没有列表,你有一个看起来像Python序列的字符串。

您可以使用ast.literal_eval()将其解释为Python文字;它将被解析为字符串元组:

import ast

thelist = [ast.literal_eval(line) for line in open('file.txt', 'r')]

或者您可以在逗号上拆分,然后删除空格和引号:

thelist = [[elem.strip(" '") for elem in line.split(',')]
           for line in open('file.txt', 'r')]

仅当您引用的值不包含逗号时才有效。

无论哪种方式,您都会获得列表清单;你可以压扁那个清单:

thelist = [elem for line in open('file.txt', 'r')
                for elem in ast.literal_eval(line)]

或只是阅读一行

thelist = ast.literal_eval(next(open('file.txt', 'r')))

您也可以使用csv module

import csv

reader = csv.reader(
    open('file.text', 'rb'),
    quotechar="'", skipinitialspace=True)
thelist = list(reader)

或仅限第一行:

thelist = next(reader)