标签: large-files

编辑非常大的sql dump/text文件(在linux上)

我必须导入一个大的mysql转储(最多10G).但是,已经使用具有索引定义的数据库结构预定义了sql转储.我想通过删除索引和表定义来加速数据库插入.

这意味着我必须删除/编辑10G文本文件的前几行.在linux上执行此操作的最有效方法是什么?

需要将整个文件加载到RAM中的程序对我来说太过分了.

linux mysqldump large-files

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

使用python解析大型(20GB)文本文件 - 以2行读取1

我正在解析一个20Gb的文件,并将符合某种条件的行输出到另一个文件,但偶尔python会同时读取2行并连接它们.

inputFileHandle = open(inputFileName, 'r')

row = 0

for line in inputFileHandle:
    row =  row + 1
    if line_meets_condition:
        outputFileHandle.write(line)
    else:
        lstIgnoredRows.append(row)
Run Code Online (Sandbox Code Playgroud)

我检查了源文件中的行结尾,并将它们检出为换行符(ascii char 10).拉出问题行并在隔离中解析它们按预期工作.我在这里遇到一些python限制吗?第一个异常文件中的位置大约是4GB标记.

python large-files

15
推荐指数
2
解决办法
6235
查看次数

使用C++解析非常大的CSV文件

我的目标是在OSX环境中的QT项目中使用C++解析大型csv文件.(当我说csv我的意思是tsv和其他变种1GB~5GB).

这似乎是一项简单的任务,但是当文件大小变大时,事情会变得复杂.我不想编写自己的解析器,因为许多边缘情况与解析csv文件有关.

我已经找到了各种csv处理库来处理这个工作,但解析1GB文件在我的机器上大约需要90~120秒,这是不可接受的.我现在没有对数据做任何事情,我只是为了测试目的而处理和丢弃数据.

cccsvparser是我尝试过的库之一.但唯一足够快的库是fast-cpp-csv-parser,它给出了可接受的结果:我的机器上15秒,但只有在知道文件结构时它才有效.

使用示例:fast-cpp-csv-parser

#include "csv.h"

int main(){
    io::CSVReader<3> in("ram.csv");
    in.read_header(io::ignore_extra_column, "vendor", "size", "speed");
    std::string vendor; int size; double speed;
    while(in.read_row(vendor, size, speed)){
    // do stuff with the data
    }
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我无法加载任意文件,我必须专门定义变量以匹配我的文件结构.我不知道任何允许我在运行时动态创建这些变量的方法.

我尝试过的另一种方法是逐行读取csv文件,使用fast-cpp-csv-parser, LineReader类非常快(读取整个文件大约需要7秒),然后使用可以处理字符串的cccsvparser lib 解析每一行.但这需要大约40秒才能完成,与第一次尝试相比这是一个改进,但仍然是不可接受的.

我已经看到了与csv文件解析相关的各种stackoverflow问题,它们都没有将大文件处理到帐户中.

此外,我花了很多时间谷歌搜索找到这个问题的解决方案,我真的很想念包裹经理喜欢npmpip在搜索开箱即用的解决方案时提供的自由.

我将不胜感激任何有关如何处理此问题的建议.

编辑:

当使用@fbucek的方法时,处理时间减少到25秒,这是一个很大的改进.

我们可以进一步优化这个吗?

c++ csv qt large-files

15
推荐指数
1
解决办法
4597
查看次数

上传大文件到AWS S3存储和Django在Heroku上没有30多岁的请求超时

我有一个django应用程序,允许用户上传视频.它托管在Heroku上,以及存储在S3 Bucket上的上传文件.在从Django app获得预先签名的请求后,我使用JavaScript直接将文件上传到S3.这是由于Heroku 30s请求超时.无论如何,我可以通过Django后端上传大文件而不使用JavaScript并破坏用户体验吗?

python django heroku amazon-s3 large-files

15
推荐指数
1
解决办法
1148
查看次数

是否有可以管理大文件的分布式VCS?

是否有可以处理大于可用RAM的文件的分布式版本控制系统(git,bazaar,mercurial,darcs等)?

我需要能够提交大型二进制文件(即数据集,源视频/图像,存档),但我不需要能够区分它们,只需提交然后在文件更改时进行更新.

我大约一年前看过这个,没有一个明显的候选人允许这个,因为它们都是为了速度而在记忆中进行区分.这给我留下了一个VCS来管理代码和其他东西("资产管理"软件或只是rsync和脚本)的大文件,当两者的目录结构重叠时,这是非常难看的.

version-control dvcs large-files

14
推荐指数
2
解决办法
4912
查看次数

在Linux C++应用程序中查找和读取大文件

我使用G ++中的标准ftellfseek选项进入整数溢出,但我想我错了,因为似乎ftell64fseek64不可用.我一直在搜索,许多网站似乎使用lseekoff64_t数据类型引用,但我没有找到任何引用等于fseek的例子.我现在正在阅读的文件是16GB + CSV文件,期望至少翻倍.

没有任何外部库,实现与fseek/ftell对类似的结构最简单的方法是什么?我的应用程序现在使用4.x的标准GCC/G ++库.

c c++ linux gnu large-files

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

如何扫描磁盘上真正庞大的文件?

考虑到磁盘上的一个非常大的文件(可能超过4GB),我想扫描这个文件并计算出特定二进制模式的发生时间.

我的想法是:

  1. 使用内存映射文件(CreateFileMap或boost mapped_file)将文件加载到虚拟内存.

  2. 对于每个100MB映射内存,创建一个线程进行扫描并计算结果.

这可行吗?有没有更好的方法呢?

更新:
内存映射文件将是一个不错的选择,通过1.6GB文件扫描可以在11s内处理.

谢谢.

.net memory-mapped-files large-files

14
推荐指数
3
解决办法
1799
查看次数

如何在Python中打开文件后释放内存

我在Python中打开一个3 GB的文件来读取字符串.然后我将这些数据存储在字典中.我的下一个目标是使用这个字典构建一个图形,所以我正在密切监视内存使用情况.

在我看来,Python将整个3 GB文件加载到内存中,我无法摆脱它.我的代码看起来像这样:

with open(filename) as data:

    accounts = dict()

    for line in data:
        username = line.split()[1]
        IP = line.split()[0]

        try:
            accounts[username].add(IP)
        except KeyError:
            accounts[username] = set()
            accounts[username].add(IP)

print "The accounts will be deleted from memory in 5 seconds"
time.sleep(5)
accounts.clear()

print "The accounts have been deleted from memory"
time.sleep(5)

print "End of script"
Run Code Online (Sandbox Code Playgroud)

最后一行是在那里,以便我可以监视内存使用情况.该脚本在内存中使用超过3 GB的位.清除字典可以释放大约300 MB.当脚本结束时,释放剩余的内存.

我正在使用Ubuntu,我使用"系统监视器"和终端中的"免费"命令监视内存使用情况.

我不明白的是为什么在我清除字典之后Python需要这么多内存.文件是否仍存储在内存中?如果是这样,我怎么能摆脱它呢?我的操作系统没有看到释放内存的问题吗?

编辑:我已经尝试在清除字典后强行执行gc.collect(),但无济于事.

EDIT2:我在Ubuntu 12.04.LTS上运行Python 2.7.3

EDIT3:我意识到我忘了提到一些非常重要的东西.我真正的问题不在于我的操作系统没有"取回"Python使用的内存.后来,Python似乎没有重用那个内存(它只是要求操作系统有更多的内存).

python memory file-io large-files

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

调用close()后,大文件没有立即刷新到磁盘?

我用我的python脚本创建大文件(1GB实际上有8个).在我创建它们之后,我必须创建将使用这些文件的进程.

该脚本如下所示:

# This is more complex function, but it basically does this:
def use_file():
    subprocess.call(['C:\\use_file', 'C:\\foo.txt']);


f = open( 'C:\\foo.txt', 'wb')
for i in 10000:
    f.write( one_MB_chunk)
f.flush()
os.fsync( f.fileno())
f.close()

time.sleep(5) # With this line added it just works fine

t = threading.Thread( target=use_file)
t.start()
Run Code Online (Sandbox Code Playgroud)

但应用程序use_file行为foo.txt是空的.有一些奇怪的事情发生了:

  • 如果我C:\use_file C:\foo.txt在控制台中执行(脚本完成后),我得到正确的结果
  • 如果我use_file()在另一个python控制台中手动执行,我得到正确的结果
  • C:\foo.txtopen()被调用后立即在磁盘上可见,但0B在脚本结束之前一直保持大小
  • 如果我添加time.sleep(5)它只是按预期开始工作(或者更确切地说是必需的)

我已经发现:

  • os.fsync()但它似乎没有工作(从结果use_file作为是否C:\foo.txt是空的)
  • 使用buffering=(1<<20)(打开文件时)似乎也不起作用 …

python windows io large-files python-3.x

14
推荐指数
2
解决办法
5312
查看次数

在Python中读取巨大的文件

我有一个384MB的文本文件,有50​​00万行.每行包含2个以空格分隔的整数:键和值.该文件按键排序.我需要一种有效的方法来查找Python中大约200个键列表的值.

我目前的方法包括在下面.这需要30秒.必须有更高效的Python foo才能将其降低到最多几秒钟的合理效率.

# list contains a sorted list of the keys we need to lookup
# there is a sentinel at the end of list to simplify the code
# we use pointer to iterate through the list of keys
for line in fin:
  line = map(int, line.split())
  while line[0] == list[pointer].key:
    list[pointer].value = line[1]
    pointer += 1
  while line[0] > list[pointer].key:
    pointer += 1
  if pointer >= len(list) - 1:
    break # end of list; -1 is due …
Run Code Online (Sandbox Code Playgroud)

python performance file-io large-files

13
推荐指数
2
解决办法
9695
查看次数