从列表中的字符串中提取值 - python

时间:2014-04-02 19:13:24

标签: python string list python-2.7

我的python代码中有一个列表,其结构如下:

file_info = ['{file:C:\\samples\\123.exe, directory:C:\\}','{file:C:\\samples\\345.exe, directory:C:\\}',...]

我想只提取列表中每个值的文件和目录值并打印出来。使用以下代码,我可以提取目录值:

for item in file_info:

    print item.split('directory:')[1].strip('}')

但是我无法想出一种方法来提取文件'值。以下不起作用:

print item.split('file:')[1].strip(', directory:C:\}')

连连呢?如果有更好的方法来提取除此之外的文件和目录值,那也会很棒。提前谢谢。

2 个答案:

答案 0 :(得分:3)

如果格式与您提供的格式完全相同,则最好使用re

import re

file_info = ['{file:file1, directory:dir1}', '{file:file2, directory:directory2}']

pattern = re.compile(r'\w+:(\w+)')
for item in file_info:
    print re.findall(pattern, item)

或使用字符串replace()strip()split()(有点ha and和脆弱):

file_info = ['{file:file1, directory:dir1}', '{file:file2, directory:directory2}']

for item in file_info:
    item = item.strip('}{').replace('file:', '').replace('directory:', '')
    print item.split(', ')

两个代码段打印:

['file1', 'dir1']
['file2', 'directory2']

如果file_info项只是转储了json项(请注意双引号),您可以使用json将它们加载到词典中:

import json

file_info = ['{"file":"file1", "directory":"dir1"}', '{"file":"file2", "directory":"directory2"}']

for item in file_info:
    item = json.loads(item)
    print item['file'], item['directory']

或,literal_eval()

from ast import literal_eval

file_info = ['{"file":"file1", "directory":"dir1"}', '{"file":"file2", "directory":"directory2"}']

for item in file_info:
    item = literal_eval(item)
    print item['file'], item['directory']

两个代码段打印:

file1 dir1
file2 directory2

希望有所帮助。

答案 1 :(得分:0)

我愿意:

import re

regx = re.compile('{\s*file\s*:\s*([^,\s]+)\s*'
                  ','
                  '\s*directory\s*:\s*([^}\s]+)\s*}')

file_info = ['{file:C:\\samples\\123.exe, directory  :  C:\\}',
             '{  file:  C:\\samples\\345.exe,directory:C:\\}'
             ]

for item in file_info:
    print '%r\n%s\n' % (item,
                        regx.search(item).groups())

结果

'{file:C:\\samples\\123.exe, directory  :  C:\\}'
('C:\\samples\\123.exe', 'C:\\')

'{  file:  C:\\samples\\345.exe,directory:C:\\}'
('C:\\samples\\345.exe', 'C:\\')