- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用以下代码,当我增加 islice 中的起始行时,我发现执行时间越来越长。例如,start_row 为 4 将在 1 秒内执行,但 start_row 为 500004 将花费 11 秒。为什么会发生这种情况?有没有更快的方法来做到这一点?我希望能够迭代大型 CSV 文件(几 GB)中的多个行范围并进行一些计算。
import csv
import itertools
from collections import deque
import time
my_queue = deque()
start_row = 500004
stop_row = start_row + 50000
with open('test.csv', 'rb') as fin:
#load into csv's reader
csv_f = csv.reader(fin)
#start logging time for performance
start = time.time()
for row in itertools.islice(csv_f, start_row, stop_row):
my_queue.append(float(row[4])*float(row[10]))
#stop logging time
end = time.time()
#display performance
print "Initial queue populating time: %.2f" % (end-start)
最佳答案
For example, a start_row of 4 will execute in 1s but a start_row of 500004 will take 11s
这就是 islice 的智能。或者懒惰,取决于您喜欢哪个术语。
事实是,文件“只是”硬盘驱动器上的字节字符串。他们没有任何内部组织。 \n
只是那个很长很长的字符串中的另一组字节。 如果不查看任何特定行之前的所有信息,就无法访问该行(除非您的行的长度完全相同,在这种情况下您可以使用 file.seek
)。
4号线?查找第 4 行很快,您的计算机只需要查找 3 \n
。 50004 号线?您的计算机必须通读该文件,直到找到 500003 \n
。没有办法解决这个问题,如果有人告诉你相反的情况,他们要么拥有某种其他类型的量子计算机,要么他们的计算机正在像世界上所有其他计算机一样在背后读取文件。
至于你能做些什么:在尝试捕获行进行迭代时尽量保持聪明。聪明,又懒。安排您的请求,以便您只需遍历文件一次,并在提取所需数据后立即关闭文件。 (顺便说一下,islice 完成了所有这些工作。)
在Python中
lines_I_want = [(start1, stop1), (start2, stop2),...]
with f as open(filename):
for i,j in enumerate(f):
if i >= lines_I_want[0][0]:
if i >= lines_I_want[0][1]:
lines_I_want.pop(0)
if not lines_I_want: #list is empty
break
else:
#j is a line I want. Do something
如果您可以控制创建该文件,请将每一行设置为相同的长度,以便您可以查找
。或者使用数据库。
关于Python:islice 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225782/
我是 Python 的新手,我的母语不是英语。今天学习了itertools模块中的一些函数。有一个函数叫做 islice。它代表 infinitive slice 吗?据我了解,它可用于分割对象的不定
使用以下代码,当我增加 islice 中的起始行时,我发现执行时间越来越长。例如,start_row 为 4 将在 1 秒内执行,但 start_row 为 500004 将花费 11 秒。为什么会发
这个问题不太可能帮助任何 future 的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况有关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visit
itertools.islice 的文档说: Make an iterator that returns selected elements from the iterable. If start i
更新:按要求添加了所需的图案我有 2 个列表,预期输出与上次不同 Numberset1 = [10,11,12] Numberset2 = [1,2,3,4,5] 我想通过操作列表来显示输出,预期输出
我有这样的代码: #opened file f goto_line = num_lines #Total number of lines while not found: line_str =
我正在处理每个包含数百万条记录的大文件(大约 2GB 解压后,数百 MB 的 gzip)。 我用 islice 遍历记录,这让我可以得到一小部分(用于调试和开发)或当我想测试代码时得到全部。我注意到我
代码不返回任何内容,它会永远运行。请帮助编写代码片段。仅供引用:我第一次使用多处理。 我的本地内存不足,因此从 zip 文件中提取数据。我的想法是使用 islice 一次读取 n 行,并使用 pr
我有一个适用于生成器和生成器函数的代码片段。当我尝试使用 itertools.islice 对生成器进行切片时,代码片段不会生成任何输出。 我查看了代码,发现了以下代码片段: if isinstanc
我想使用 islice 多次读取文本文件的行。目的是每次尝试获取包含列表中包含的索引的行,然后写入仅包含这些行的文件。我尝试了以下脚本,但我意识到(通过打印行号)程序仅读取文件一次,尽管我有 for
我一直在尝试应用一种算法,根据特定条件将 Python 列表缩减为更小的列表。由于原始列表的体积很大,大约有 100k 个元素,我尝试使用 itertools 来避免多次内存分配,所以我想出了这个:
我有一个 .txt 文件,其中包含 1000 行 500 列,其中包含 0-2 范围内的整数。例如,前三行可能如下所示: 0 0 0 0 2 2 2 2 2 1 1 1 0 2 1 2 ... 0 2
Python itertools.islice 的源代码在哪里? 我找到了 itertoolsmodule.c , 但找不到函数 itertools.islice (也许它在那里,但我对 C 代码了解
我正在尝试使用“from itertools import islice”,以便使用 liblas 模块一次从 *.las 文件中读取多行。 (我的目标是逐 block 阅读) 以下问题:Python
问题: 我有下面的代码。我想知道为什么我是否在下面的代码中包含带有注释的行并不重要。 #!/usr/bin/env python from itertools import * import time
早些时候,我试图回答一个问题,我想尽可能高效地遍历列表切片。 for x in lst[idx1:]: 并不理想,因为它会创建一个副本(通常,这是 O(n))。我的下一个想法是使用 itertools
在我看来,itertools 模块中的许多函数都有更简单的等价物。例如,据我所知,itertools.islice(range(10),2,5) 与 range(10)[2:5] 做同样的事情> 和
我有一个监控日志文件的 python 3 程序。该日志包括用户编写的聊天消息等内容。日志由第三方应用程序创建,我无法更改。 今天用户写了“텋��텋��”,导致程序崩溃并出现以下错误: future:
我正在尝试将生成器分成多个部分,以便进行一些并行计算。主要的生成器是由 g() 生成的,gslice() 应该生成它的一个子集并生成它供程序的其余部分使用: >>> from itertools im
我正在尝试做这样的事情: import asyncio from itertools import islice async def generate_numbers(n): for x in
我是一名优秀的程序员,十分优秀!