python - 在python中解析和排列文本
问题描述
我在找出最佳实施时遇到了一些麻烦
我在文件中有这种格式的数据:|serial #|machine_name|machine_owner|
如果 machine_owner 有多台机器,我希望这些机器显示在字段中以逗号分隔的列表中。以便。
|1234|弗雷德·弗林斯通|mach1| |5678|巴尼瓦砾|mach2| |1313|巴尼瓦砾|mach3| |3838|巴尼瓦砾|mach4| |1212|贝蒂瓦砾|mach5|
看起来像这样:
|弗雷德·弗林斯通|mach1| |巴尼瓦砾|mach2,mach3,mach4| |贝蒂瓦砾|mach5|
任何有关如何解决此问题的提示将不胜感激。
解决方案
您可以将dict
其用作临时容器按名称分组,然后以所需格式打印:
import re
s = """|1234|Fred Flinstone|mach1|
|5678|Barney Rubble|mach2|
|1313|Barney Rubble||mach3|
|3838|Barney Rubble||mach4|
|1212|Betty Rubble|mach5|"""
results = {}
for line in s.splitlines():
_, name, mach = re.split(r"\|+", line.strip("|"))
if name in results:
results[name].append(mach)
else:
results[name] = [mach]
for name, mach in results.items():
print(f"|{name}|{','.join(mach)}|")
推荐阅读
- python - 以编程方式创建 StackDriver 仪表板
- php - 如何在 PHP 中等分两个数组?
- android - 支持的最低 Gradle 版本为 4.10.1。当前版本是 4.4
- python - 确定 Python 类中的方法调用顺序
- python - 你如何让你的精灵不在屏幕上复制自己?一旦文本出现,你如何让你的精灵消失或重新开始?
- swift - 修改参数值时使用 filter{where:} 与 removeAll{where:} 的效率
- spring - 使用spring webclient时不支持内容类型'application/merge-patch+json'
- javascript - onClick 能够填充模式并提交表单
- android - 是否有可能创建一个可以在我打开平板电脑时启动的 android 应用程序?
- python - 引用不同的 if 语句时字符串索引超出范围