我需要将一个大文件(14 GB)分成较小的文件。该文件的格式为txt,制表符为“;” 我知道它有 70 列(字符串、双精度)。我想读取 100 万个并将它们保存在不同的文件中,file1,file2 ... fileN。
在@MKR的帮助下
但过程非常慢,我尝试使用 fread,但这是不可能的。
我该如何优化这段代码?
新代码
chunkSize <- 10000
conex <- file(description = db, open = "r")
data <- read.table(conex, nrows = chunkSize, header=T, fill=TRUE, sep =";")
index <- 0
counter <- 0
total <- 0
chunkSize <- 500000
conex <- file(description=db,open="r")
dataChunk <- read.table(conex, nrows=chunkSize, header=T, fill=TRUE,sep=";")
repeat {
dataChunk <- read.table(conex, nrows=chunkSize, header=FALSE, fill = TRUE, sep=";", col.names=db_colnames)
total <- total + sum(dataChunk$total)
counter <- counter + nrow(dataChunk)
write.table(dataChunk, file …Run Code Online (Sandbox Code Playgroud) 我在 Windows 10 上使用 Python 3.8 使用该requests模块。正如标题所示,我正在将非常大的文件发布到 HTTP 服务器,并且我想提供上传的状态。
我已经阅读了 10-20 个关于这个主题的 Stack Overflow 帖子,阅读了互联网上散布的文章,并深入研究了 GitHub 上我现在甚至不记得的项目的源代码。我试图实现我读到的所有内容,但无济于事。关于这个主题的很多信息已经有很多年了,并且该requests模块自那以后已经得到了很大的改进 - 因此一些信息可能已经过时。
我遇到的问题是使用 发送文件块requests.Response.post('Some-URL', data=file_chunk, header=header)。如果上传了 5 个文件块,则服务器上有 5 个单独的文件,而不是 1 个组合文件。
为了提供文件上传的状态,我创建了一个类似于下面所示示例的生成器函数。
def read_in_chunks(file_object, chunk_size=1024):
"""Generator to read a file piece by piece.
Default chunk size: 1k."""
while True:
data = file_object.read(chunk_size)
if not data:
break
yield data
Run Code Online (Sandbox Code Playgroud)
然后我迭代了这样创建的生成器对象:
with open('Some-File.zip', 'rb') as file_obj:
for file_chunk in read_in_chunks(file_obj):
requests.Response.post('Some-URL', data=file_chunk.encode('utf-8'), header=header)
Run Code Online (Sandbox Code Playgroud)
这不起作用。在文件块上传到的服务器上,每个块作为单独的文件存储在服务器上。如果文件被分成 5 个块,那么现在就有 5 个文件。在 …
我找了一个关于这个的stackoverflow但是找不到办法去做.它可能涉及itertools.
我想找到分割字符串的所有可能结果,比如将字符串thisisateststring分成n(等长或不等长,无关紧要,两者都应包括在内)字符串.
例如,让n是3:
[["thisisat", "eststrin", "g"], ["th", "isisates", "tstring"], ............]
Run Code Online (Sandbox Code Playgroud) 我正在使用 Python3 和 celery 处理可并行的任务。我喜欢将其分成几个块,这样就可以节省网络通信的成本。但是,celery 文档没有透露有关如何调用结果块的足够详细信息。尝试了不同的方法,但它们并没有像我预期的那样工作。我的代码段如下:
@app.task(name='pl.startregret')
def startregret(**kwargs):
items = list(zip(range(1000), range(1000)))
chunk = regretclick.chunks(items, 10)
print(chunk)
for c in chunk:
print(c)
@app.task(name='pl.regretclick')
def regretclick(x,y):
print('got it.')
return x + y
Run Code Online (Sandbox Code Playgroud)
我读了一些代码,认为我的代码中的块应该是一个生成器。然而,打印输出显示
[2014-10-15 13:12:15,930: WARNING/Worker-2] args
[2014-10-15 13:12:15,931: WARNING/Worker-2] subtask_type
[2014-10-15 13:12:15,931: WARNING/Worker-2] kwargs
[2014-10-15 13:12:15,931: WARNING/Worker-2] immutable
[2014-10-15 13:12:15,931: WARNING/Worker-2] options
[2014-10-15 13:12:15,931: WARNING/Worker-2] task
Run Code Online (Sandbox Code Playgroud)
关于调用块的正确方法有什么建议吗?
谢谢,
更新:我已阅读源代码并尝试了 chunk()。看起来现在唯一的问题是使用默认队列而不是 celeryconfig 中定义的队列。
我目前正在制作一个 Minecraft 块操作程序,我想知道 Minecraft 块部分是如何存储的。
来自Minecraft Wiki 文章,了解 Minecraft 如何存储其区块。
部分:复合标签列表,每个标签都是一个子块。
一个单独的部分。
Y:该部分的 Y 索引(不是坐标)。范围 0 到 15(从下到上),没有重复项,但如果为空,某些部分可能会丢失。
块:定义地形的 4096 字节块 ID。每块 8 位,加上 ? 来自下面的添加标签的位。
添加:可能不存在。2048 字节的附加块 ID 数据。添加到(组合)上述块 ID 以形成 0 到 4095 范围内的真实块 ID 的值。每个块 4 位。组合是通过将该值移至左侧 8 位,然后将其添加到上面的块 ID 来完成的。
数据:2048 字节的块数据另外定义了部分地形。每块 4 位。
BlockLight:2048字节记录每个块中块发射的光量。与加载时重新计算相比,加载时间更快。每块 4 位。
SkyLight:2048 字节记录照射到每个块的阳光或月光量。每块 4 位。
但我不明白怎么Blocks读。块中的每个部分都是 16 x 16 x 16 块。但 Minecraft 将块存储在一维数组的一个部分中。
您能帮我写这段代码,将生成器的产量分成100个大块,并保存到数据库中吗?
$batchSize = 100;
$batch = [];
$i = 0;
/**
* @yield array $item
*/
foreach(itemsGenerator() as $item) {
$batch[] = $item;
$i++;
if ($i === $batchSize) {
Db::table('items')->save($batch);
$batch = [];
$i = 0;
}
$cnt++;
}
if ($batch) {
Db::table('items')->save($batch);
}
Run Code Online (Sandbox Code Playgroud)
我不想把分解成大块的逻辑放在 itemsGenerator
我想以块的形式将文件f(文件大小:85GB)读取到数据帧.建议使用以下代码.
chunksize = 5
TextFileReader = pd.read_csv(f, chunksize=chunksize)
Run Code Online (Sandbox Code Playgroud)
但是,这段代码给了我TextFileReader,而不是dataframe.此外,由于内存限制,我不想连接这些块以将TextFileReader转换为dataframe.请指教.
我有一个像下面这样的数据帧,我打算用size = 30每个数据块提取窗口,然后为每个数据块写入循环,并调用其他函数.
index = pd.date_range(start='2016-01-01', end='2016-04-01', freq='D')
data = pd.DataFrame(np.random.rand(len(index)), index = index, columns=['random'])
Run Code Online (Sandbox Code Playgroud)
我找到了以下功能,但我想知道是否有更有效的方法.
def split(df, chunkSize = 30):
listOfDf = list()
numberChunks = len(df) // chunkSize + 1
for i in range(numberChunks):
listOfDf.append(df[i*chunkSize:(i+1)*chunkSize])
return listOfDf
Run Code Online (Sandbox Code Playgroud) 我为什么要使用iter_content,特别是我对使用chunk_size的用途感到非常困惑,因为我尝试过使用它,并且在下载成功后似乎以各种方式保存了文件。
g = requests.get(url, stream=True)
with open('c:/users/andriken/desktop/tiger.jpg', 'wb') as sav:
for chunk in g.iter_content(chunk_size=1000000):
print (chunk)
sav.write(chunk)
Run Code Online (Sandbox Code Playgroud)
帮助我了解的用法,iter_content当您看到将1000000字节用作时chunk_size,会发生什么,确切的目的和结果是什么?
我正在部署一个使用 CRA(Create-React-App) 生成的项目,并且所有 babel 和 webpack 配置保持不变。
另外,我正在使用 AWS S3 的静态存储桶托管功能部署我的 React 应用程序。
问题是,由于不包含服务器,因此每次部署新文件时,都会创建具有随机哈希值的新块。
当客户端位于具有旧哈希的网站中并且部署了新哈希时,客户端会收到块加载错误。
为了演示这一点,使用 构建项目并yarn build转到/build文件夹以查看 webpack 生成的块。然后使用serve,我可以演示我的部署在本地计算机中的行为方式。
执行后yarn serve,转到正在提供构建文件的相应本地主机。
然后,在/build/static/js文件夹中,根据需要重命名每个块文件的哈希值。
保持浏览器不变,然后重新启动yarn serve,这将提供重命名的块文件。
然后回到浏览器,你很可能会得到两个错误:
Uncaught SyntaxError: Unexpected token '<'
Loading Chunk n failed.(missing: ~~)
Run Code Online (Sandbox Code Playgroud)
我认为可以解决这个问题的方法是在发生 ChunkLoadError 时硬重新加载网页。遗憾的是,window.reload(boolean)函数已被弃用,仅仅这样做并window.location.reload()不能解决这个问题。
+) PS。React.Lazy()我通过在一些代码中使用来实现代码分割。