我有 30 GB 的文本文件和 html 文件,它们来自各种来源,位于嵌套的文件夹层次结构中。所有这些文件夹都位于我的主目录中名为 zipFiles 的文件夹中。层次结构有 20 层深,有些分支比其他分支更深。我想将所有这些文件的文本连接到一个巨大的文本文件中,以用作 Spark 项目中的 RDD。显然,我需要通过删除 html 格式代码将 html 文件转换为文本。
我的方法是:遍历嵌套文件夹层次结构(不知道如何在 bash 中执行此操作)如果文件是 html,则解压缩它将其转换为文本将其添加到巨大的结果中
我发现的问题是内存不足——如果我只是将文本添加到代码中的变量中,在内存中完成所有操作。
如果我从磁盘打开巨大的文件,写入它并关闭文件,那么我就会破坏磁盘,并且它也会变慢。
Bash 脚本是我唯一的解决方案吗?因为它让我害怕。我想我可以用 Python 来做,但我还需要知道如何在 Python 中解压以及如何将 HTML 转换为文本。
答案1
find
当你需要在目录中递归执行某些操作时,这是一个很好的工具。zcat 可以
我的方法是这样的:
find /home/username/zipFiles -type f -name "*.zip" -exec zcat {} \; > outputfile.txt
例子:
$ df > testfile.txt
$ zip testArchive testfile.txt
adding: testfile.txt (deflated 54%)
$ find . -maxdepth 1 -name "*.zip" -exec zcat {} \;
Filesystem 1K-blocks Used Available Use% Mounted on
udev 1954212 4 1954208 1% /dev
tmpfs 393160 3392 389768 1% /run
/dev/sda1 115247656 82424300 26946008 76% /
none 4 0 4 0% /sys/fs/cgroup
none 5120 0 5120 0% /run/lock
none 1965792 80 1965712 1% /run/shm
none 102400 32 102368 1% /run/user
cgmfs 100 0 100 0% /run/cgmanager/fs
/dev/sdb1 30343056 48 30343008 1% /media/xieerqi/SDCZ43-032G