在Python中,如何从以空格和'\r\n';多行分隔数字?

在Python中,如何从以空格和'\r\n';多行分隔数字?,python,Python,行数从一开始就知道了 输入文件: 预期结果: 我目前: 将“\r\n”文件的每一行分条 使用.split()获取每一行 在空格处分开,int(i)转换为整数 代码: 只需拆分并映射到int,拆分将为您完成所有工作: with open("in.txt") as f: for line in f: print(map(int,line.split())) # list(map(int,line.split())) for py3 要获取列表列表,请使用列表理解: wi

行数从一开始就知道了

输入文件: 预期结果: 我目前:

  • 将“\r\n”文件的每一行分条
  • 使用.split()获取每一行 在空格处分开,int(i)转换为整数
代码:
只需拆分并映射到int,拆分将为您完成所有工作:

with open("in.txt") as f:
    for line in f:
        print(map(int,line.split())) # list(map(int,line.split())) for py3
要获取列表列表,请使用列表理解:

with open("in.txt") as f:
    data = [map(int,line.split()) for line in f]
如果您使用python3,那么需要使用
list(map…
作为python3中的map返回和迭代器,而不是python2中的列表

您也可以使用dict按名称/键访问每个列表,但您可以使用索引,这样dict就没有意义了。

str.split()
已经删除了末尾的空白,包括一个换行符。无需删除
\r
;Python已经将行分隔符转换为
\n

不要尝试分配多个
行*
变量;只需使用列表即可:

with open(filename, 'r') as fobj:
    all_lines = [[int(num) for num in line.split()] for line in fobj]
现在您有了一个包含整数的列表

您可以在从文件中读取每一行时对其进行处理;此时移向最终产品,而不是将所有行保留在内存中:

with open(filename, 'r') as fobj:
    for line in fobj:
        numbers = [int(num) for num in line.split()]
        # do something with this line of numbers before moving on to the next.

如果您的需求允许您使用,您可以使用来读取文件内容并将其解析为2D Numpy
ndarray
。如果您需要以某种复杂的方式同时处理多行,这可能会很有用,因为这种方式不适合用迭代器实现


由于您提到数字不是从文件的开头开始的,您可能希望使用
skiprows
参数
loadtxt()
跳过第一行。或者您可以自己打开文件,从文件对象读取七个字节,然后将其传递到
loadtxt()
,小心
map()
在Python 3中,您将得到一个迭代器,而不是列表。@MartijnPieters,看看OP的printsYup,我仍然坚持列表理解,因为OP很少是唯一的观众。@MartijnPieters,我添加了
列表(map…
,我更喜欢在强制转换时使用map,但每个都使用map,速度会慢得多,因为这需要两次全局查找和两次调用;对于转换的大型列表,C循环的速度会超过列表理解python代码循环,但对于小型列表,列表理解文字语法通常更快。此外,我认为它更易于阅读可以。我本来打算使用dict,但正如@Padraic Cunningham和您的答案所指出的,使用列表列表和索引是一个更好的选择。谢谢!
with open("in.txt") as f:
    data = [map(int,line.split()) for line in f]
with open(filename, 'r') as fobj:
    all_lines = [[int(num) for num in line.split()] for line in fobj]
with open(filename, 'r') as fobj:
    for line in fobj:
        numbers = [int(num) for num in line.split()]
        # do something with this line of numbers before moving on to the next.