Python 按所需顺序对大型文件进行排序
我有以下格式的数据:Python 按所需顺序对大型文件进行排序,python,linux,sorting,bigdata,Python,Linux,Sorting,Bigdata,我有以下格式的数据: <j> <l> <n> "jd". <K> <J> <N> <D>. <A> <B> <D> <F>. <E> <F> <G> "abc". <A> <B> <C> <D>. <G> <k> "jd" "l". “jd”。 .
<j> <l> <n> "jd".
<K> <J> <N> <D>.
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<A> <B> <C> <D>.
<G> <k> "jd" "l".
“jd”。
.
.
“abc”。
.
“jd”“l”。
我需要对数据进行排序,以便只对奇数行进行排序,并根据奇数行对相应的偶数行进行排序。i、 e.仅使用奇数行对文件进行排序,即仅对以下行进行排序:
<j> <l> <n> "jd".
<A> <B> <D> <F>.
<A> <B> <C> <D>.
“jd”。
.
.
到
。
.
“jd”。
而偶数行则按原样复制。例如,上述各项的排序顺序为:
<A> <B> <C> <D>.
<G> <k> "jd" "l".
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<j> <l> <n> "jd".
<K> <J> <N> <D>.
。
“jd”“l”。
.
“abc”。
“jd”。
.
现在,偶数行“jd”“l”。
总是出现在奇数行“abc”之后,
总是出现在奇数行“abc”之后,
和偶数行“
出现在奇数行“jd”之后。
我尝试使用带有并行选项的linux排序命令,因为我的文件大小是200 GB——但这样做会扰乱奇数行的顺序。是否有某种方法可以使用linux排序命令或使用某种python程序我可以实现200GB文件的预期行为我同意使用linux
sort
程序是一个好主意,因为它非常有效,可以处理比RAM大得多的排序文件。诀窍是在排序之前和之后转换数据,以便sort
可以执行您想要的操作
您需要在一个循环中读取数据,该循环一次读取两行,将这两行合并为一行,并将新行写入一个新文件
接下来,对新文件进行排序,告诉sort
仅对一行中的前4个键进行排序
现在,逐行读取排序后的数据,将每行拆分为两行,并将拆分后的数据写入最终的目标文件
行拆分和连接程序可以很容易地用awk或Python编写。我建议您自己编写,但如果您在让它们正常工作方面遇到问题,我很乐意提供帮助(我相信其他人也会这样做)。因为您使用的是linux,我假设您已经安装了vim(在我的ubuntu机器上默认安装了一个最低版本)。 如果没有,请先安装它 我相信vim可以处理大文件而不会阻塞(与记事本不同)
我知道这不是一个非常优雅的解决方案(更不用说pythonic了),但它避免了“必须编写自定义程序”和它涉及的内存问题。您需要类似于
map reduce
的东西来为问题的子集找到解决方案:仅4行。然后你就可以用python来实现这一点,方法是将文件分割成不同的文件。你可能需要一种使用硬盘作为存储的高效排序算法,例如mergesort或类似的算法。@taesu我的问题是我找不到这样的解决方案问题是我没有得到问题子集的排序算法,或者它需要太多的脑力!
<A> <B> <C> <D>.
<G> <k> "jd" "l".
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<j> <l> <n> "jd".
<K> <J> <N> <D>.
<j> <l> <n> "jd".
<K> <J> <N> <D>.
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<A> <B> <C> <D>.
<G> <k> "jd" "l".
<j> <l> <n> "jd". <K> <J> <N> <D>.
<A> <B> <D> <F>a <E> <F> <G> "abc".
<A> <B> <C> <D>. <G> <k> "jd" "l".
<A> <B> <C> <D>. <G> <k> "jd" "l".
<A> <B> <D> <F>a <E> <F> <G> "abc".
<j> <l> <n> "jd". <K> <J> <N> <D>.
<A> <B> <C> <D>.
<G> <k> "jd" "l".
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<j> <l> <n> "jd".
<K> <J> <N> <D>.