标签: large-files

在PHP中读取非常大的文件

fopen当我尝试读取一个非常适中的文件时失败了PHP. A 6 meg file让它窒息,虽然周围的小文件100k很好.我读过,有时需要重新编译PHP-D_FILE_OFFSET_BITS=64以读取在20场演出什么可笑的文件标记,但我不应该有一个6兆的文件没有问题?最终我们想要读取大约100兆的文件,并且能够打开它们然后逐行读取它们将很好,因为我可以使用较小的文件.

您在非常大的文件上阅读和操作的技巧/解决方案是什么PHP

更新:这是一个在我的6 meg文件上失败的简单代码块的示例 - PHP似乎没有抛出错误,它只返回false.也许我正在做一些非常愚蠢的事情?

$rawfile = "mediumfile.csv";

if($file = fopen($rawfile, "r")){  
  fclose($file);
} else {
  echo "fail!";
}
Run Code Online (Sandbox Code Playgroud)

另一个更新:感谢大家的帮助,它确实是一个令人难以置信的愚蠢 - 权限问题.当较大的文件没有时,我的小文件莫名其妙地具有读权限.卫生署!

php file large-files

26
推荐指数
3
解决办法
7万
查看次数

Python:如何将巨大的文本文件读入内存

我在带有1GB RAM的Mac Mini上使用Python 2.6.我想读一个巨大的文本文件

$ ls -l links.csv; file links.csv; tail links.csv 
-rw-r--r--  1 user  user  469904280 30 Nov 22:42 links.csv
links.csv: ASCII text, with CRLF line terminators
4757187,59883
4757187,99822
4757187,66546
4757187,638452
4757187,4627959
4757187,312826
4757187,6143
4757187,6141
4757187,3081726
4757187,58197
Run Code Online (Sandbox Code Playgroud)

因此文件中的每一行都包含两个以逗号分隔的整数值的元组.我想读取整个文件并根据第二列对其进行排序.我知道,我可以在不将整个文件读入内存的情况下进行排序.但我认为对于一个500MB的文件,我仍然可以在内存中进行,因为我有1GB可用.

但是当我尝试读取文件时,Python似乎分配的内存比磁盘上的文件所需的内存多得多.因此,即使使用1GB的RAM,我也无法将500MB的文件读入内存.我用于读取文件和打印有关内存消耗的信息的Python代码是:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

infile=open("links.csv", "r")

edges=[]
count=0
#count the total number of lines in the file
for line in infile:
 count=count+1

total=count
print "Total number of lines: ",total

infile.seek(0)
count=0
for line in infile:
 edge=tuple(map(int,line.strip().split(","))) …
Run Code Online (Sandbox Code Playgroud)

python memory sorting large-files

25
推荐指数
2
解决办法
4万
查看次数

使用WebSocket上传大文件

我正在尝试使用WebSocket API上传大文件(至少500MB,最好是几GB).问题是我无法弄清楚如何编写"发送此文件的片段,释放使用的资源然后重复".我希望我可以避免使用像Flash/Silverlight这样的东西.

目前,我正在开展以下工作:

function FileSlicer(file) {
    // randomly picked 1MB slices,
    // I don't think this size is important for this experiment
    this.sliceSize = 1024*1024;  
    this.slices = Math.ceil(file.size / this.sliceSize);

    this.currentSlice = 0;

    this.getNextSlice = function() {
        var start = this.currentSlice * this.sliceSize;
        var end = Math.min((this.currentSlice+1) * this.sliceSize, file.size);
        ++this.currentSlice;

        return file.slice(start, end);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,我会上传使用:

function Uploader(url, file) {
    var fs = new FileSlicer(file);
    var socket = new WebSocket(url);

    socket.onopen = function() {
        for(var i = 0; i …
Run Code Online (Sandbox Code Playgroud)

javascript html5 large-files websocket fileapi

25
推荐指数
4
解决办法
6万
查看次数

如何在.NET中下载大文件(通过HTTP)?

我需要在C#控制台应用程序中通过HTTP 下载文件(2 GB).问题是,在大约1.2 GB之后,应用程序内存不足.

这是我正在使用的代码:

WebClient request = new WebClient();
request.Credentials = new NetworkCredential(username, password);
byte[] fileData = request.DownloadData(baseURL + fName);
Run Code Online (Sandbox Code Playgroud)

正如你所看到的......我正在将文件直接读入内存.我很确定如果我要从块中读取数据并将其写入磁盘上的文件,我可以解决这个问题.

我怎么能这样做?

.net c# http large-files

24
推荐指数
3
解决办法
4万
查看次数

PHP x86如何在没有外部程序的情况下获取> 2 GB文件的文件大小?

我需要获得大小超过2 GB的文件的文件大小.(在4.6 GB文件上测试).没有外部程序有没有办法做到这一点?

当前状态:

  • filesize(),stat()fseek()失败
  • fread()feof()工作

通过读取文件内容可以获得文件大小(非常慢!).

$size = (float) 0;
$chunksize = 1024 * 1024;
while (!feof($fp)) {
    fread($fp, $chunksize);
    $size += (float) $chunksize;
}
return $size;
Run Code Online (Sandbox Code Playgroud)

我知道如何在64位平台上使用它(使用fseek($fp, 0, SEEK_END)ftell()),但我需要32位平台的解决方案.


解决方案:我已经为此启动了开源项目.

大文件工具

Big File Tools是在PHP中操作超过2 GB的文件所需的hacks集合(即使在32位系统上).

php file-io x86 filesize large-files

24
推荐指数
2
解决办法
2万
查看次数

从大文件中按编号读取行

我有一个1500万行的文件(不适合内存).我还有一个小的行号矢量 - 我要提取的行.

如何一次性读出线条?

我希望有一个C函数可以一次完成它.

r line-numbers large-files

24
推荐指数
2
解决办法
3万
查看次数

对文本文件的GitHub 100MB文件大小限制有什么好的解决方法吗?

我有一个190 MB纯文本文件,我想在github上跟踪.

文本文件是我们的文本到语音引擎的代词词典文件.我们经常在文本文件中添加和修改行,并且差异相当小,因此在这个意义上它非常适合git.

但是,GitHub具有严格的100 MB文件大小限制.我已经尝试过GitHub大文件存储服务,但每次更改时都会上传整个190 MB文件的新版本 - 因此,如果我沿着这条路走下去,那么它将迅速增长到几千兆字节.

我想将文件保存为一个文件而不是拆分它,因为这是我们的工作流程当前的方式,并且需要一些编码才能允许多个文本文件作为我们工具中的输入/输出(并且我们没有太多的开发资源) .

我有一个想法是,也许可以设置一些预提交和提交后挂钩来自动拆分和连接大文件?这可能吗?

其他想法?

编辑:我知道StackOverflow上类似问题中描述的100 MB文件大小限制,但我不认为我的问题是重复的,因为我要求的是差异很小且频繁的特定情况(我'我没有尝试上传大型ZIP文件或任何东西).但是,我的理解是git-lfs仅适用于很少更改的文件,而普通的git非常适合我所描述的那种文件; 除了GitHub有文件大小限制.

更新:我昨天花了一些时间尝试创建一个小型跨平台程序,该程序使用git hooks将文件拆分并连接成较小的文件.它有点工作但不太令人满意.您需要将.gitignore排除大文本文件,这使得git不知道它是否已更改.拆分文件最初没有检测到git statusgit commit导致与此SO问题中描述的相同问题,这非常烦人:预提交脚本创建mysqldump文件,但"没有提交(工作目录清理)"? 设置一个cron作业(linux)和计划任务(windows)以定期自动重新生成拆分文件可能会解决这个问题,但是自动设置并不容易,可能会导致用户计算机出现性能问题,而且不是很优雅解.可能还需要一些像动态修改.gitignore这样的hacky解决方案,并且绝不会得到实际文本文件的差异,只有分割文件(尽管这可能是可接受的,因为它们非常相似).

所以,睡着了,今天我觉得git hook方法毕竟不是一个好选择,因为它有太多的怪癖.正如@PyRulez所建议的那样,我想我不得不看看除GitHub之外的其他服务(不幸的是,因为我喜欢github).托管解决方案更可取,以避免必须管理我们自己的服务器.我也希望它能公开上市......

更新2:我已经看了一些GitHub的替代品,目前我倾向于使用GitLab.我已经联系了GitHub关于提高100MB限制的可能性的支持,但如果他们不这样做,我将只为这个特定项目切换到GitLab.

git github large-files pre-commit-hook post-commit-hook

22
推荐指数
3
解决办法
2万
查看次数

下载大文件 - iPhone SDK

我正在使用Erica Sadun的异步下载方法(此处链接到项目文件:下载),但是她的方法不适用于具有大尺寸(50 mb或更高)的文件.如果我尝试下载超过50 MB的文件,它通常会因内存崩溃而崩溃.无论如何我可以调整这段代码,以便它也适用于大文件?这是我在DownloadHelper类中的代码(已经在下载链接中):

.H

@protocol DownloadHelperDelegate <NSObject>
@optional
- (void) didReceiveData: (NSData *) theData;
- (void) didReceiveFilename: (NSString *) aName;
- (void) dataDownloadFailed: (NSString *) reason;
- (void) dataDownloadAtPercent: (NSNumber *) aPercent;
@end

@interface DownloadHelper : NSObject 
{
    NSURLResponse *response;
    NSMutableData *data;
    NSString *urlString;
    NSURLConnection *urlconnection;
    id <DownloadHelperDelegate> delegate;
    BOOL isDownloading;
}
@property (retain) NSURLResponse *response;
@property (retain) NSURLConnection *urlconnection;
@property (retain) NSMutableData *data;
@property (retain) NSString *urlString;
@property (retain) id delegate;
@property (assign) BOOL isDownloading;

+ …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c download large-files

21
推荐指数
1
解决办法
4万
查看次数

在PHP中处理大型JSON文件

我正在尝试处理稍大(可能高达200M)的JSON文件.该文件的结构基本上是一个对象数组.

所以有些东西:

[
  {"property":"value", "property2":"value2"},
  {"prop":"val"},
  ...
  {"foo":"bar"}
]
Run Code Online (Sandbox Code Playgroud)

每个对象都具有任意属性,并且不必与数组中的其他对象共享它们(如同,具有相同).

我想对数组中的每个对象应用处理,因为文件可能很大,我不能在内存中啜饮整个文件内容,解码JSON并迭代PHP数组.

理想情况下,我想阅读文件,获取每个对象的足够信息并进行处理.如果有类似的库可用于JSON,那么SAX类型的方法就可以了.

关于如何最好地处理这个问题的任何建议?

php json large-files

21
推荐指数
3
解决办法
2万
查看次数

如何从大文件中读取行分隔的JSON(逐行)

我正在尝试加载一个填充了JSON字符串的大文件(大小为2GB),由换行符分隔.例如:

{
    "key11": value11,
    "key12": value12,
}
{
    "key21": value21,
    "key22": value22,
}
…
Run Code Online (Sandbox Code Playgroud)

我现在导入它的方式是:

content = open(file_path, "r").read() 
j_content = json.loads("[" + content.replace("}\n{", "},\n{") + "]")
Run Code Online (Sandbox Code Playgroud)

这似乎是一个黑客(在每个JSON字符串之间添加逗号以及开始和结束方括号以使其成为正确的列表).

有没有更好的方法来指定JSON分隔符(换行符\n而不是逗号,)?

而且,Python似乎无法为从2GB数据构建的对象正确分配内存,有没有办法构建每个JSON对象,因为我正在逐行读取文件?谢谢!

python parsing json large-files

21
推荐指数
4
解决办法
4万
查看次数