3

我需要从文件中读取几个整数,逐行写入并由换行符分隔并将它们插入到列表中。

1
2
3
4
5

目前我可以使用以下代码阅读它,但我还需要优化我的代码:

import sys

fd = open(sys.argv[1], 'r')
for line in fd:
    line = line.rstrip('\n')
    L.append(int(line))

从性能的角度来看,是否有另一种方法可以从文件中读取所有删除换行符的行?

谢谢。

4

4 回答 4

4

int()自动删除空白字符,因此不需要str.rstrip.

>>> int('10\r\n')
10
>>> int('10\n')
10
>>> int('10  \n')
10

您也可以在这里使用列表推导,它比list.append

import sys

with open(sys.argv[1]) as fd:
    L = [int(line) for line in fd]

为什么要with声明?

with处理文件对象时最好使用关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。

于 2013-08-05T09:24:12.347 回答
3

您实际上不需要删除该行,因为int()已经摆脱了尾随空格:

L = []
with open('nums.txt') as myfile: # With statements are more pythonic!
    for line in myfile:
        L.append(int(line))

print L

回报:

[1, 2, 3, 4, 5]

因此,您可以使用map()

with open('nums.txt') as myfile:
    L = map(int, myfile)

希望这可以帮助!

于 2013-08-05T09:24:14.597 回答
3

使用列表推导会更快,因为循环和追加不会在 python 中完成,而是由运行时引擎完成。(你也不需要去掉换行符)。

[int(line) for line in fd]
于 2013-08-05T09:24:53.453 回答
0

您可以考虑使用numpy,特别是numpy.genfromtxt,例如:

import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")

这将创建data一个具有与文件中一样多的行和列的 numpy 数组

于 2013-08-05T11:58:44.067 回答