python – 按所需顺序对一个巨大的文件进行排序
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 按所需顺序对一个巨大的文件进行排序,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2245字,纯文字阅读大概需要4分钟。
内容图文
我有以下形式的数据:
<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".
<A> <B> <D> <F>.
<A> <B> <C> <D>.
至
<A> <B> <C> <D>.
<A> <B> <D> <F>.
<j> <l> <n> "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>.
现在偶数行“< G>< k>”jd“”l“.”总是出现在奇数行“< A>< B>< C>< D>”之后.并且偶数行“< E>< F>< G>>< G>”abc“.”总是出现在奇数行“< A>< B>< D>< F>.”之后.并且偶数行“< K>< J>< N>< D>.”出现在奇数行< j>之后< L个; < N> “JD”.
我尝试使用带有并行选项的linux sort命令,因为我的文件大小是200 GB – 但这样做会使奇数行的顺序受到干扰.有没有办法使用linux sort命令或使用一些python程序我可能实现200 GB文件的所需行为
解决方法:
由于你使用的是linux,我认为你安装了vim(默认情况下我的ubuntu机器上有一个最小版本).
如果没有,请先安装它.
我相信vim可以处理大文件而不会窒息(不像记事本)
>使用vim,将每一行合并到它下面的一行
input.dat
<j> <l> <n> "jd".
<K> <J> <N> <D>.
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<A> <B> <C> <D>.
<G> <k> "jd" "l".
ex input.dat -c 'g/^/j' -c 'sav! joined.dat' -c q
joined.dat:
<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".
g是全局命令,它匹配具有行开始(^)(每行)的每一行并执行join命令.
在那之后,你将每条偶数行追加到前一个不均匀的行,用两个空格分隔.
然后它保存(覆盖!)作为joined.dat并退出
>像通常使用sort命令一样对joined.dat文件进行排序
Sorted.dat
<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>.
>“取消加入”你在第一步加入的内容
sed 's/. /.\n/' sorted.dat > finishedproduct.dat
假设您的初始文件在每行末尾都有一个点.
注意:如果你使用相同的文件作为sed的输入和输出,我相信你可以得到一个空白文件.
finishedproduct.dat:
<A> <B> <C> <D>.
<G> <k> "jd" "l".
<A> <B> <D> <F>.
<E> <F> <G> "abc".
<j> <l> <n> "jd".
<K> <J> <N> <D>.
在这种情况下,sed基本上替换点和换行符的点和两个空格,有效地替换vim引入的两个空格来连接行.
我知道它不是一个非常优雅的解决方案(更不用说pythonic)了,但它规避了“必须编写自定义程序”以及它涉及的内存问题.
内容总结
以上是互联网集市为您收集整理的python – 按所需顺序对一个巨大的文件进行排序全部内容,希望文章能够帮你解决python – 按所需顺序对一个巨大的文件进行排序所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。