【问题标题】:Read text file into matrix python将文本文件读入矩阵python
【发布时间】:2020-05-03 12:24:18
【问题描述】:

我想读取一个带有尾随空格的文本文件:

0 3 4 5 2 
3 0 2 4 0 
4 2 0 1 0 
5 4 1 0 0 
2 0 0 0 0

变成这样的矩阵:

[[0, 3, 4, 5, 2], [3, 0, 2, 4, 0], [4, 2, 0, 1, 0], [5, 4, 1, 0, 0], [2, 0, 0, 0, 0]]

这是我目前所拥有的:

with open(filename, 'r') as filename:
   adjmtrx = [[int(num) for num in line.split(' ')] for line in filename if line.rstrip('')]

但我收到以下错误:

adjmtrx = [[int(num) for num in line.split(' ')] for line in filename if line.strip() != " "]
ValueError: invalid literal for int() with base 10: '\n'

我想我已经接近了..

【问题讨论】:

  • 您的代码非常适合我。如果我在包含矩阵的文件末尾添加两行新行,则会出现该错误,因此问题一定出在数据文件中。

标签: python removing-whitespace


【解决方案1】:

您需要在使用该值的位置剥离。

if line.rstrip('') 并没有按照你的想法去做。在.strip() 上阅读更多信息。

with open(filename, 'r') as filename:
   adjmtrx = [[int(num) for num in line.strip().split(' ')] for line in filename]

print(adjmtrx)
# [[0, 3, 4, 5, 2], [3, 0, 2, 4, 0], [4, 2, 0, 1, 0], [5, 4, 1, 0, 0], [2, 0, 0, 0, 0]]

【讨论】:

  • 不,if line.rstrip('') 测试是故意的,我很确定。使用它可以让代码跳过输入中的空白行。
  • 好的,同意。无论如何,支票是无害的,可以保留。 @KarlKnechtel
【解决方案2】:

line.rstrip() 返回相同的文本,右侧没有空格。您可以使用它来删除右侧的空格。您可以使用split() 将行转换为列表(它的默认参数是" ")。

def read_file(file_name):
    with open(file_name, 'r') as filename:
        l = []
        for i in filename.readlines():
            l.append([int(ii) for ii in i.rstrip().split()])
        return l

print(read_file("filename.txt"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 1970-01-01
    • 2022-11-15
    • 2016-09-25
    相关资源
    最近更新 更多