我的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:\}')
连连呢?如果有更好的方法来提取除此之外的文件和目录值,那也会很棒。提前谢谢。
答案 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']
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:\\')