首页 > 解决方案 > Python 读取文件返回一个 Python 表

问题描述

我正在编写一个函数,它读入一个文件并返回一个表作为嵌套列表,所有数字都转换为整数。

这是文件的样子:

a,a,1,a
4,a,a,a
a,a,a,2
a,3,a,a

这是我的代码:

def read_from_file(file_name):
    f=open(file_name, 'r')
    res = []
    for line in f:
        line = line.split(',')
        res.append(line)

    for i in range(len(res)):
        for j in range(len(res)):
            if res[i][j] == 'a\n':
                res[i][j] = 'a'
            if res[i][j] != 'a':
                res.append(int(res[i][j]))
    return res

我希望它返回如下内容:

[ [‘a’,‘a’,1,‘a’],
  [4,‘a’,‘a’,‘a’],
  [‘a’,‘a’,‘a’,2],
  [‘a’,3,‘a’,‘a’] ]

但是当我运行我的代码时,发生了错误:

res.append(int(res[i][j]))
ValueError: invalid literal for int() with base 10: ' a'

对我做错了什么有任何评论吗?谢谢

标签: python

解决方案


这是另一个建议,但它会更改处理列表中的值。

编辑:

def convert_int(file_name):
    astring = open(file_name, 'r').read()    # ' x,x,1,x\n4,x,x,x\nx,x,x,2\nx,3,x,x'
    alist = [y.split(",") for y in astring.split("\n")]  # [[' x', 'x', '1', 'x'], ['4', 'x', 'x', 'x'], ['x', 'x', 'x', '2'], ['x', '3', 'x', 'x']]
    for asublist in alist:
        for i, x in enumerate(asublist):
            try:
               asublist[i] = int(x)
            except ValueError:
             pass
    return alist

>>>convert_int(file_name)
[[' x', 'x', 1, 'x'], [4, 'x', 'x', 'x'], ['x', 'x', 'x', 2], ['x', 3, 'x', 'x']]

推荐阅读