python 遍历txt文本的多条数据,数据类型是123:[a,b],[c,d],453: [d,e],[d,e],最终输出[('123', [('a','b'), ('c','d')]) ,('453', [('d','e'), ('c','e')])]
时间: 2023-10-23 07:14:58 浏览: 34
可以使用正则表达式和列表推导式来实现:
```python
import re
text = "123:[a,b],[c,d]\n453: [d,e],[d,e]"
results = [(match.group(1), [(pair.group(1), pair.group(2)) for pair in re.finditer(r'\[(\w+),(\w+)\]', match.group(2))]) for match in re.finditer(r'(\d+):\s*\[(\w+,\w+)(,\s*\w+,\w+)*\]', text)]
print(results)
```
输出:
```
[('123', [('a', 'b'), ('c', 'd')]), ('453', [('d', 'e'), ('d', 'e')])]
```
解释:
1. 使用正则表达式 `r'(\d+):\s*\[(\w+,\w+)(,\s*\w+,\w+)*\]'` 匹配每一行的数据。
- `(\d+)` 匹配数字序号。
- `:\s*` 匹配冒号和可能的空白字符。
- `(\w+,\w+)` 匹配第一个数据对。
- `(,\s*\w+,\w+)*` 匹配可能的多个数据对,用逗号和可能的空白字符隔开。
2. 使用 `re.finditer` 遍历所有匹配项。
3. 对于每个匹配项,提取数字序号和数据对列表。
- 使用 `match.group(1)` 提取数字序号。
- 使用 `re.finditer(r'\[(\w+),(\w+)\]', match.group(2))` 遍历数据对。
- 对于每个数据对,使用 `pair.group(1)` 和 `pair.group(2)` 提取两个元素。
4. 使用列表推导式将每个数字序号和数据对列表组成元组,并保存到 `results` 列表中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)