将大型文本 (xyz) 数据库拆分为 x 等份

Posted

技术标签:

【中文标题】将大型文本 (xyz) 数据库拆分为 x 等份【英文标题】:split a large text (xyz) database into x equal parts 【发布时间】:2012-03-08 04:27:15 【问题描述】:

我想拆分一个大型文本数据库(约 1000 万行)。我可以使用类似的命令

$ sed -i -e '4 s/(dB)//' -e '4 s/Best\ unit/Best_Unit/' -e '1,3 d' '/cygdrive/c/                                                                                                                      Radio Mobile/Output/TRC_TestProcess/trc_longlands.txt'

$ split -l 1000000  /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands/trc_longlands.txt 1

第一行是清理数据库,接下来是拆分它 - 但是输出文件没有字段名称。如何将字段名称合并到每个数据集中并通过管道传输包含原始文件、新文件名和行号(来自原始文件)的列表。这样就可以在 arcgis 模型中使用它来重新加入最终的简化多边形数据集。

替代且更有用 - 因为这需要进入 arcgis 模型,所以基于 python 的解决方案是最好的。更多细节在https://gis.stackexchange.com/questions/21420/large-point-to-polygon-by-buffer-join-buffer-dissolve-issues#comment29062_21420和Remove specific lines from a large text file in python

根据 icyrock.com 的回答使用基于 CYGWIN 的 Python 解决方案

我们有 process_text.sh

cd  /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands
mkdir processing
cp trc_longlands.txt processing/trc_longlands.txt
cd txt_processing
sed -i -e '4 s/(dB)//' -e '4 s/Best\ unit/Best_Unit/' -e '1,3 d' 'trc_longlands.txt'
split -l 1000000  trc_longlands.txt trc_longlands_
cat > a
h
1
2
3
4
5
6
7
8
9
^D
split -l 3
split -l 3 a 1
mv 1aa 21aa
for i in 1*; do head -n1 21aa|cat - $i > 2$i; done
for i in 21*; do echo ---- $i; cat $i; done

如何将“TRC_Longlands”和路径替换为输入文件名 - 在 python 中,我们为此设置了 %path%/%name。 最后一行是否需要“do echo”?

这是由python使用

调用的
import os
os.system("process_text.bat")

process_text.bat 基本上在哪里

bash process_text.sh

从dos运行时出现以下错误...

Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft 公司。保留所有权利。

C:\Users\georgec>bash P:\2012\Job_044_DM_Radio_Propogation\Working\FinalPropogat ion\TRC_Longlands\process_text.sh 'bash' 未被识别为 内部或外部命令,可运行的程序或批处理文件。

当我从 cygwin 运行 bash 命令时,我也得到了

georgec@ATGIS25 /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands $ bash process_text.sh :没有这样的文件或目录: /cygdrive/P/2012/Job_044_DM_Radio_Propogation/Working/FinalPropogation/TRC_Longlands cp: 无法创建常规文件 `processing/trc_longlands.txt\r': 否 这样的文件或目录:没有这样的文件或目录:txt_processing: 没有这样的文件或 directoryds.txt

但文件是在根目录下创建的。

为什么有一个“。”在目录名之后?如何为它们赋予 .txt 扩展名?

【问题讨论】:

你能提供一些示例数据吗? @kev - 在***.com/questions/9473921/… 【参考方案1】:

如果您只想将原始文件的第一行添加到除第一个拆分之外的所有拆分中,您可以执行以下操作:

$ cat > a
h
1
2
3
4
5
6
7
^D
$ split -l 3
$ split -l 3 a 1
$ ls
1aa 1ab 1ac a
$ mv 1aa 21aa
$ for i in 1*; do head -n1 21aa|cat - $i > 2$i; done
$ for i in 21*; do echo ---- $i; cat $i; done
---- 21aa
h
1
2
---- 21ab
h
3
4
5
---- 21ac
h
6
7

显然,第一个文件将比中间部分少一行,最后一部分也可能更短,但如果这不是问题,这应该可以正常工作。当然,如果你的表头多行,只要把head -n1改成head -nXX就是表头行数。

希望这会有所帮助。

【讨论】:

感谢伙伴...完美运行。但是有没有一种简单的方法可以从/或在 python 中调用它?这只是大型 arcgis 模型中的一步,我不想每次都输入此代码。 Python 也会运行一个 .bat 文件... import os 然后os.system("a.bat") 应该可以工作。纯 Python 是绝对可行的 - 参见例如这个***.com/questions/546508/… 对不起,我的意思是如何将您的代码合并到 bat 文件中?因为 sed、split 和您的代码都在 cygwin 窗口中运行。 将其设为a.sh 并使用来自a.batbash a.sh 接受了,它基本上工作得很好,但以不同的方式重新询问,因为我需要一个基于 python 的解决方案,并且根据***.com/questions/9626842/…进行更多控制

以上是关于将大型文本 (xyz) 数据库拆分为 x 等份的主要内容,如果未能解决你的问题,请参考以下文章

PIG 脚本根据特定单词将大型文本文件拆分为多个部分

如何有效地将大型数据框拆分为多个拼花文件?

C ++中(整个)单词的拆分

根据行值python将大型csv文件拆分为多个文件

使用 awk 将大型、复杂的一列文件拆分为多列

将 HDF5 文件中的大型数据集读入 x_train 并在 keras 模型中使用