Python中文
首页
教程
问答
标签
搜索
登录
注册
快速转换大(2.1gb+)二进制文件(纬度/经度/高度到ECEF)
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>现在,我正在尝试将经纬度高度格式的大量二进制点文件转换为基于文本的ECEF笛卡尔格式(x,y,z)。现在的问题是这个过程非常缓慢。在</p> <p>我有超过100G的数据要处理,可能会有更多的数据进来。我想让这段代码尽可能快。在</p> <p>现在我的代码如下所示:</p> <pre><code>import mmap import sys import struct import time pointSize = 41 def getArguments(): if len(sys.argv) != 2: print """Not enough arguments. example: python tllargbin_reader.py input_filename.tllargbin output_filename """ return None else: return sys.argv print getArguments() def read_tllargbin(filename, outputCallback): f = open(filename, "r+") map = mmap.mmap(f.fileno(),0) t = time.clock() if (map.size() % pointSize) != 0: print "File size not aligned." #return for i in xrange(0,map.size(),pointSize): data_list = struct.unpack('=4d9B',map[i:i+pointSize]) writeStr = formatString(data_list) if i % (41*1000) == 0: print "%d/%d points processed" % (i,map.size()) print "Time elapsed: %f" % (time.clock() - t) map.close() def generate_write_xyz(filename): f = open(filename, 'w', 128*1024) def write_xyz(writeStr): f.write(writeStr) return write_xyz def formatString(data_list): return "%f %f %f" % (data_list[1], data_list[2],data_list[3]) args = getArguments() if args != None: read_tllargbin(args[1],generate_write_xyz("out.xyz")) </code></pre> <p>convertXYZ()基本上是这里的转换公式: <a href="http://en.wikipedia.org/wiki/Geodetic_system" rel="nofollow">http://en.wikipedia.org/wiki/Geodetic_system</a></p> <p>我在想,如果用一个线程以~4MB的块读取内容,将它们放入有界缓冲区,使用不同的线程转换为字符串格式,并让最后一个线程将字符串写回另一个硬盘上的文件,这样会不会更快一些。不过,我可能是在冒险。。。在</p> <p>我现在使用python进行测试,但是如果我能更快地处理这些文件,我不会反对切换。在</p> <p>有什么建议都很好。谢谢</p> <p><strong>编辑:</strong></p> <p>我再次使用cProfile分析了代码,这次将字符串格式和io分开。似乎我真的被字符串格式杀死了。。。这是分析器报告</p> ^{pr2}$ <p>有没有更快的方法来格式化字符串?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>鉴于<code>formatString</code>是最慢的操作,请尝试以下操作:</p> <pre><code>def formatString(data_list): return " ".join((str(data_list[1]), str(data_list[2]), str(data_list[3]))) </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
文本导入时标题行中的特殊字符
1 回答
文本小部件:在没有输入时更新并在循环后保持空闲
1 回答
文本小部件tkin
1 回答
文本小部件tkinter中的标签更改或文本外观更改是否有撤消功能?
5 回答
文本小部件tkinter复制图像选项
1 回答
文本小部件上的Python Tkinter ttk滚动条未缩放
1 回答
文本小部件上的滚动条可能需要根据制表符ord显示前进行滚动
2 回答
文本小部件不显示lis中的内容
8 回答
文本小部件不显示Unicode字符
1 回答
文本小部件中写入的行间距
4 回答
文本小部件中的文本作为变量
7 回答
文本小部件中的滚动条仅显示在底部
10 回答
文本小部件中的选项卡键空间计数
10 回答
文本小部件作为Lis
2 回答
文本小部件在主框架中扩展列宽
2 回答
文本小部件未使用删除功能清除
7 回答
文本小部件滚动动画(Tkinter、Python)
8 回答
文本居中。格式正确吗?
1 回答
文本差分算法
2 回答
文本已知时音频文件中的单词索引
7 回答