我有一个Python脚本,它将整数列表作为输入,我需要一次使用四个整数.不幸的是,我无法控制输入,或者我将它作为四元素元组列表传入.目前,我正在以这种方式迭代它:
for i in xrange(0, len(ints), 4):
# dummy op for example code
foo += ints[i] * ints[i + 1] + ints[i + 2] * ints[i + 3]
Run Code Online (Sandbox Code Playgroud)
它看起来很像"C-think",这让我怀疑有更多的pythonic方式来处理这种情况.迭代后会丢弃该列表,因此无需保留.也许这样的事情会更好吗?
while ints:
foo += ints[0] * ints[1] + ints[2] * ints[3]
ints[0:4] = []
Run Code Online (Sandbox Code Playgroud)
但是,仍然没有"感觉"正确.: - /
我有一个非常大的文件4GB,当我尝试阅读它时,我的电脑挂起.所以我想逐一阅读它并在处理完每件之后将处理过的零件存储到另一个文件中并阅读下一篇文章.
yield这些作品有什么方法吗?
我很想拥有一种懒惰的方法.
fp = open("a.txt")
#do many things with fp
c = fp.read()
if c is None:
print 'fp is at the eof'
Run Code Online (Sandbox Code Playgroud)
除了上面的方法,任何其他方式来找出是否是fp已经在eof?
我正在编写一个代码,一次取一个巨大的文本文件(几GB)N行,处理该批处理,并移动到下一行N行,直到我完成整个文件.(我不在乎最后一批是不是完美的尺寸).
我一直在阅读有关使用itertools islice进行此操作的信息.我想我在那里:
from itertools import islice
N = 16
infile = open("my_very_large_text_file", "r")
lines_gen = islice(infile, N)
for lines in lines_gen:
...process my lines...
Run Code Online (Sandbox Code Playgroud)
麻烦的是我想处理下一批16行,但我遗漏了一些东西
第三个链接似乎有答案,但它没有完成这项工作.
我无法找到将整个文件带到主内存的解决方案,因为我将使用的文件非常大.所以我决定使用islice第3个链接中显示的内容.前2个链接无关紧要,因为它们仅用于2行或读取1000个字符.而我需要1000行. for now N is 1000
我的文件包含100万行:
样品:
1 1 1
1 2 1
1 3 1
1 4 1
1 5 1
1 6 1
1 7 1
1 8 1
1 9 1
1 10 1
Run Code Online (Sandbox Code Playgroud)
因此,如果我一次读取1000行,我应该经历一段while 1000时间,但是当我打印p以检查我已经完成了多少次时,它并没有停留在a 1000.它19038838运行我的程序1400几秒钟后达成了!
码:
def _parse(pathToFile, N, alg):
p = 1
with open(pathToFile) as f:
while True:
myList = [] …Run Code Online (Sandbox Code Playgroud) 我有一个巨大的文件(大约30GB),每行包括2D曲面上一个点的协调。我需要将文件加载到Numpy array:中points = np.empty((0, 2)),并对其进行应用scipy.spatial.ConvexHull。由于文件的大小很大,因此无法立即将其加载到内存中,因此我想将其作为一批N行scipy.spatial.ConvexHull加载,然后应用到一小部分,然后再加载下N行!什么是有效的方法?
我发现在python中,您可以islice用来读取文件的N行,但问题是lines_gen生成器对象,它为您提供了文件的每一行,应该在循环中使用,因此我不确定如何转换所述lines_gen成numpy的阵列中的一个有效的方法是什么?
from itertools import islice
with open(input, 'r') as infile:
lines_gen = islice(infile, N)
Run Code Online (Sandbox Code Playgroud)
我的输入文件:
0.989703 1
0 0
0.0102975 0
0.0102975 0
1 1
0.989703 1
1 1
0 0
0.0102975 0
0.989703 1
0.979405 1
0 0
0.020595 0
0.020595 0
1 1
0.979405 1
1 1
0 0
0.020595 0
0.979405 1
0.969108 1
...
...
...
0 …Run Code Online (Sandbox Code Playgroud)