繁体   English   中英

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

[英]Extract values from within strings in a list - python

我的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:\}')

有什么建议吗? 如果除此之外还有其他更好的方法来提取文件和目录值,那也很好。 提前致谢。

如果格式与您提供的格式完全相同,则最好使用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() (有点hackish和脆弱):

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

希望能有所帮助。

我会做:

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:\\')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM