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

如何从文本文件读取所有列并整理为指定格式?

问题:将文本文件的列值整理为指定格式列表

我需要读取一个文本文件,把文件中的列值整理成指定格式的列表。

文本文件内容:

40 10 5 5
30 20 10 0
30 30 10 5

期望输出:

(40,30,30),(10,20,30),(5,10,10),(5,0,5)

我尝试了以下代码:

def contest(filename):
    contestFile = open(filename,'r')
    contestFileLines=contestFile.readlines()
    startColumn = 0
    contestResult=[]
    for x in contestFileLines:
        contestResult.append(x.split()[startColumn])
        
    contestFile.close()
    print(contestResult)
    
contest("testing.txt")

但输出仅为:

['40', '30', '30']

请问该如何修改代码以实现需求?


解决方案

你的代码只提取了每一行的第0列数据,没有处理所有列,也没完成转置和格式转换。可以按以下思路修改:

  1. 读取并解析文件:把每行内容分割为整数列表,用with语句自动管理文件资源,避免手动关闭的疏漏。
  2. 转置行与列:将原有的行数据转换为列数据,获取每一列的所有元素。
  3. 格式化输出:把每个列的元素拼接成(a,b,c)的格式,再用逗号连接所有列的结果。

修改后的代码:

def contest(filename):
    with open(filename, 'r') as contestFile:
        # 读取每行并转为整数列表,跳过空行
        lines = [list(map(int, line.split())) for line in contestFile if line.strip()]
    
    # 转置行与列,得到各列的元素集合
    columns = zip(*lines)
    
    # 格式化每个列为指定字符串,再拼接成最终结果
    result = ','.join(f'({",".join(map(str, col))})' for col in columns)
    
    print(result)

contest("testing.txt")

代码说明:

  • with open(...):自动处理文件的打开与关闭,更安全高效。
  • list(map(int, line.split())):将每行的字符串分割后转为整数,确保数据类型正确。
  • zip(*lines):*lines将所有行作为独立参数传入zip,实现行到列的转置——原3行4列的数据,转置后得到4个元组,每个元组对应一列的所有值。
  • ','.join(...):先把每个列的元素转为字符串并用逗号连接,套上括号后,再把所有列的字符串用逗号连接成最终格式。

运行这段代码后,就能得到你期望的输出:(40,30,30),(10,20,30),(5,10,10),(5,0,5)


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 16:25:34