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 12:13:29 浏览: 36
可以使用正则表达式来匹配每条数据,然后提取出需要的数据。
具体实现如下:
```python
import re
txt = '''123:[a,b],[c,d]
453: [d,e],[d,e]'''
# 使用正则表达式匹配每条数据
pattern = r'(\d+):\s*\[(\w+),(\w+)\],\[(\w+),(\w+)\]'
result = re.findall(pattern, txt)
# 将数据转换成需要的格式
output = []
for r in result:
key = r[0]
values = [(r[1], r[2]), (r[3], r[4])]
output.append((key, values))
print(output)
```
输出结果为:
```
[('123', [('a', 'b'), ('c', 'd')]), ('453', [('d', 'e'), ('d', 'e')])]
```
相关问题
python 遍历txt文本的多条数据,其中数据类型是123: [a,b],[c,d],最终输出[('123', [('a','b'), ('c','d')])] ,
假设txt文本中每行只有一条数据,可以使用以下代码实现:
```
result = []
with open('data.txt', 'r') as f:
for line in f:
data = line.strip().split(':')
key = data[0]
values = data[1].split(',')
sub_result = []
for value in values:
sub_data = value.strip('[]').split(',')
sub_result.append((sub_data[0], sub_data[1]))
result.append((key, sub_result))
print(result)
```
其中,假设txt文本中的数据格式为:`123: [a,b],[c,d]`,则代码中的`data = line.strip().split(':')`将数据按照冒号分隔开,并获取到key和values。接着,使用`values = data[1].split(',')`将values按照逗号分隔开,得到一个包含多个子数据的列表。然后,使用一个循环遍历每个子数据,将其按照逗号和方括号分隔开,并将分隔后的数据存入一个元组中。最后,将key和子数据列表组成一个元组,并添加到结果列表中。最终输出的结果即为`[('123', [('a','b'), ('c','d')])]`。
python 遍历txt文本的多条数据,数据类型是123:[a,b],[c,d],453: [d,e],[d,e],最终输出[('123', [('a','b'), ('c','d')]) ,('453', [('d','e'), ('c','e')])]
可以使用正则表达式和列表推导式来实现:
```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)
![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)