我需要从文件中读取几个整数,逐行写入并由换行符分隔并将它们插入到列表中。
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))
从性能的角度来看,是否有另一种方法可以从文件中读取所有删除换行符的行?
谢谢。
我需要从文件中读取几个整数,逐行写入并由换行符分隔并将它们插入到列表中。
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))
从性能的角度来看,是否有另一种方法可以从文件中读取所有删除换行符的行?
谢谢。
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
处理文件对象时最好使用关键字。这样做的好处是文件在其套件完成后正确关闭,即使在途中引发异常也是如此。
您实际上不需要删除该行,因为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)
希望这可以帮助!
使用列表推导会更快,因为循环和追加不会在 python 中完成,而是由运行时引擎完成。(你也不需要去掉换行符)。
[int(line) for line in fd]
您可以考虑使用numpy,特别是numpy.genfromtxt
,例如:
import numpy as np
data = np.genfromtxt("yourfile.dat",delimiter="\n")
这将创建data
一个具有与文件中一样多的行和列的 numpy 数组