如何从文本文件读取所有列并整理为指定格式?
问题:将文本文件的列值整理为指定格式列表
我需要读取一个文本文件,把文件中的列值整理成指定格式的列表。
文本文件内容:
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列数据,没有处理所有列,也没完成转置和格式转换。可以按以下思路修改:
- 读取并解析文件:把每行内容分割为整数列表,用
with语句自动管理文件资源,避免手动关闭的疏漏。 - 转置行与列:将原有的行数据转换为列数据,获取每一列的所有元素。
- 格式化输出:把每个列的元素拼接成
(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
相关产品推荐
相关产品推荐

