Python 解析脚本中的行
我需要从表示服务器任务的文件中读取行。这些线由几对线组成,其中一些线是重复的。我需要解析它们,消除重复项,并将它们分成两组,以便更好地执行。这就是aline的样子:Python 解析脚本中的行,python,parsing,Python,Parsing,我需要从表示服务器任务的文件中读取行。这些线由几对线组成,其中一些线是重复的。我需要解析它们,消除重复项,并将它们分成两组,以便更好地执行。这就是aline的样子: 'task1'->3124, 'task2'->7743, 'task1'->3124, 'task3'->3456, 'task4'->23984 我想获得: task1 task2 task3 task4 我对Python非常陌生(只有C方面的经验),希望能在代码中使用更多Python函数。这是
'task1'->3124, 'task2'->7743, 'task1'->3124, 'task3'->3456, 'task4'->23984
我想获得:
task1 task2
task3 task4
我对Python非常陌生(只有C方面的经验),希望能在代码中使用更多Python函数。这是我当前的代码(仍然不完整,但已经有错误):
您可以使用:
import re
from itertools import izip_longest
line = "'task1'->3124, 'task2'->7743, 'task1'->3124, 'task3'->3456, 'task4'->23984"
tasks = set(re.findall("'(.*?)'->\d+", line))
for t1, t2 in izip_longest(*[iter(tasks)] * 2, fillvalue=''):
print t1, t2
# task1 task2
# task3 task4
- 在单引号中查找后面跟着
和一些数字的所有内容->
- 放入一组以消除重复项
- 分成两组,在有奇数的地方,留下一个空白字符串
'
import re
from itertools import izip_longest
line = "'task1'->3124, 'task2'->7743, 'task1'->3124, 'task3'->3456, 'task4'->23984"
tasks = set(re.findall("'(.*?)'->\d+", line))
for t1, t2 in izip_longest(*[iter(tasks)] * 2, fillvalue=''):
print t1, t2
# task1 task2
# task3 task4
- 在单引号中查找后面跟着
和一些数字的所有内容->
- 放入一组以消除重复项
- 分成两组,在有奇数的地方,留下一个空白字符串
'
>>> import ast
>>> s = "'task1'->3124, 'task2'->7743, 'task1'->3124, 'task3'->3456, 'task4'->23984"
>>> d = ast.literal_eval('{' + s.replace('->', ':') + '}')
{'task1': 3124, 'task2': 7743, 'task3': 3456, 'task4': 23984}
>>> it = iter(d)
>>> for first, second in zip(it, it):
print first, second
task1 task2
task3 task4
这将实现您想要的:
>>> import ast
>>> s = "'task1'->3124, 'task2'->7743, 'task1'->3124, 'task3'->3456, 'task4'->23984"
>>> d = ast.literal_eval('{' + s.replace('->', ':') + '}')
{'task1': 3124, 'task2': 7743, 'task3': 3456, 'task4': 23984}
>>> it = iter(d)
>>> for first, second in zip(it, it):
print first, second
task1 task2
task3 task4
欢迎使用python,您可以简单地执行以下操作
list(set([l.split('->')[0][1:-1] for l in line.split(', ')]))
这将返回以下输入示例
['task1', 'task2', 'task3', 'task4']
说明:
- 分裂 这将按给定的字符拆分字符串。这里是“,”和“”,因此将返回所有对
- l、 拆分('->')[0] 这将拆分该对并用引号拾取任务名称
- l、 拆分('->')[0][1:-1] 这将从1到len-1字符中选取任务名称的部分,这是为了删除引号
- 设置 这将把列表转换成一组唯一的元素
- 名单 将集合转换回列表
list(set([l.split('->')[0][1:-1] for l in line.split(', ')]))
这将返回以下输入示例
['task1', 'task2', 'task3', 'task4']
说明:
- 分裂 这将按给定的字符拆分字符串。这里是“,”和“”,因此将返回所有对
- l、 拆分('->')[0] 这将拆分该对并用引号拾取任务名称
- l、 拆分('->')[0][1:-1] 这将从1到len-1字符中选取任务名称的部分,这是为了删除引号
- 设置 这将把列表转换成一组唯一的元素
- 名单 将集合转换回列表