You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python将无分隔符文本文件数据转换为指定格式列表?

解决带空格元素的文本拆分问题

嘿,这个问题我之前刚帮朋友处理过!普通的split()方法确实搞不定像"United States"、"$19.485 trillion"这种带空格的元素,不过咱们可以利用这段文本的固定结构来精准拆分。

核心思路

观察你的数据会发现:

  • 每个国家的条目都以数字序号开头(1、2、3...)
  • 除了国家名和带"trillion"的GDP表述,其他所有元素(比如$19,485,394,000,000、2.27%等)都是不带空格的
  • 每个条目的字段数量是固定的(8个字段:序号、国家名、GDP总值、GDP万亿简写、增长率、人口、人均GDP、占比)

基于这个规律,我们可以用正则表达式先把每个国家的完整条目提取出来,再对每个条目拆分出对应的字段。

Python代码实现

import re

# 假设你已经从TXT文件读取了内容,存到text变量里
text = "1 United States $19,485,394,000,000 $19.485 trillion 2.27% 325,084,756 $59,939 24.08% 2 China $12,237,700,479,375 $12.238 trillion 6.90% 1,421,021,791 $8,612 15.12% 3 Japan $4,872,415,104,315 $4.872 trillion 1.71% 127,502,725 $38,214 6.02%"

# 第一步:提取每个国家的完整条目(匹配以数字开头,到下一个数字开头或结尾的内容)
country_entries = re.findall(r'\d+ .*?(?=\d+ |$)', text, re.DOTALL)

# 第二步:对每个条目拆分出8个字段
result = []
for entry in country_entries:
    # 用正则捕获每个字段:序号、国家名、GDP总值、GDP万亿、增长率、人口、人均GDP、占比
    match = re.match(r'(\d+) (.+?) (\$.+?) (\$.+? trillion) (\d+\.\d+%) (\d+,?\d+) (\$.+?) (\d+\.\d+%)', entry)
    if match:
        # 把捕获到的字段转成列表,添加到结果中
        result.append(list(match.groups()))

# 打印结果看看
for row in result:
    print(row)

代码解释

  1. 提取条目:re.findall(r'\d+ .*?(?=\d+ |$)', text) 这段正则会找到所有以数字+空格开头,直到遇到下一个数字+空格或者文本结尾的内容,这样就把每个国家的完整条目单独分出来了。
  2. 拆分字段:re.match(...) 用分组捕获的方式,精准匹配每个字段:
    • (\d+):匹配序号(数字)
    • (.+?):非贪婪匹配国家名(直到遇到第一个$为止)
    • (\$.+?):匹配带$的GDP总值
    • (\$.+? trillion):匹配带trillion的GDP简写
    • 后面的几个分组分别匹配增长率、人口、人均GDP和占比,这些都是格式固定的无空格元素

运行代码后,你就能得到想要的二维列表啦!

内容的提问来源于stack exchange,提问作者vinvarad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:57:49