从文本文件中读取字符串列表,并删除多余的引号

时间:2018-06-28 09:54:29

标签: python list parsing text

在我的文本文件中,有一个字符串列表,如下所示:

['', '"0=SYSEV,1=APPEV,2:3=VECEV"', '"ASEN"+$y', '"FALSE"', '"G"+$x+"ARBCFG"', '"G"+$x+"ARBPR"', '"HUGO:SECURE"', '"Internal"', '"SERIAL0:TRANSMIT"', '$fpi_mem_range', '$fpi_to_sri_base', '$fpi_to_sri_range', '$sx_fpi_base', '$sx_fpi_range', '$sx_sri_dest', '$trignum_g-1', '$x!=0', '$x!=1', '$x==1', '0', '0x0', '0x00', '0x0000', '0x00000000', '0x00000FFFF', '0x0000FFFF', '0x0D', '0x10', '0x1000', '0x10000000', '0x11001111', '0x11111100', '0xffc', '0xffffffff', '1', '1 clock cycle for generating the MSB', '10', '100', '101', '102', '103', '104', '115', '1156', '116', '117', '118', '1188', '119', '1192', '1196', '12', '120']

此列表使用以下代码写在文本文件中:

thefile = open('test.txt', 'w')
for item in thelist:
    thefile.write("%s\n" % item)

我想再次阅读列表。所以我在用这段代码:

with open('test.txt') as f:
    content = f.readlines()
content = [x.strip() for x in content] 

我获得的列表是正确的,但提取的字符串包含我要删除的多余引号。这是我获得的列表:

['','"0=SYSEV,1=APPEV,2:3=VECEV"','"ASEN"+$y','"FALSE"',....,'0x0000FFFF']

要删除多余的引号,我使用了ast.literaleval(),但出现了这个错误:

 File "/home/ubuntu/anaconda3/lib/python3.6/ast.py", line 35, in parse
 return compile(source, filename, mode, PyCF_ONLY_AST)

 File "<unknown>", line 1
 "ASEN"+$y

  ^
 SyntaxError: unexpected EOF while parsing

似乎它删除了列表中所有元素的单引号,甚至是我们不需要删除其引号的单引号。 还有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

可能的解决方案是使用re.sub删除所有双引号字符。实际上,这是通过使用正则表达式匹配双引号字符并替换为空字符来实现的。

import re
thelist = ['','"0=SYSEV,1=APPEV,2:3=VECEV"','"ASEN"+$y','"FALSE"','0x0000FFFF']

newlist = [];

for item in thelist:
    newlist.append(re.sub('["]','',item))

newlist将包含thelist中的元素,且不带双引号。

编辑。

您也可以使用str.replace方法来改善性能,如以下 zwer 所指出的。

for item in thelist:
  newlist.append(item.replace('"',''))
相关问题