【发布时间】:2013-02-08 10:00:02
【问题描述】:
我有一个包含 x,y,z 值的文件。我希望找到一种优雅的方式来打开并向每一行添加一个新值 id 并再次保存同一个文件。
def get_point_grid_id(x,y,x_min,y_max,x_dist,y_dist):
col = int((x - x_min)/x_dist)
row = int((y_max - y)/y_dist)
return (row, col)
前
1 1 10
2 2 10
3 3 10
id 将是
get_point_grid_id(1,1,0,10,1,1)
(9, 1)
get_point_grid_id(2,2,0,10,1,1)
(8, 2)
get_point_grid_id(3,3,0,10,1,1)
(7, 3)
新文件将是
1 1 10 (9, 1)
2 2 10 (8, 2)
3 3 10 (7, 3)
我正在阅读 Stackoverflow 中的几种方法,并测试了几种方法。老实说,我已尝试保存新文件,但未能成功。
我已经尝试过以下解决方案
with open(file_temp, "r+") as f:
for line in open(file_temp):
x,y,z = line.split()
id = get_point_grid_id(float(x),float(y),0,10,1,1)
element = [x,y,z,id]
newelement = " ".join([str(e) for e in element])+ "\n"
f.write(newelement)
但我收到此错误消息
Traceback (most recent call last):
File "<editor selection>", line 3, in <module>
ValueError: too many values to unpack
newelement(真实数据)在哪里
'481499.55 6244324.75 19.15 (377, 2909)\n'
【问题讨论】:
-
写入单独的文件,然后重命名!
-
是的,但文件已经很大(超过 10 GB)
-
亲爱的@SudiptaChatterjee 谢谢,但我正在寻找一个保存编码的解决方案。我确信有一种方法可以在 python 中逐行打开和替换
-
由于当今存储设备的顺序特性,在文件中间插入一个字节意味着剩余的数据需要移动一个字节。我不确定今天是否有任何文件系统支持这一点。我能想到的最好的三个替代方案是:(1)使用更新的数据创建一个新文件并在最后重命名它,(2)将数据保存在数据库中,例如SQLite 并让数据库库负责更新字段,(3) 以支持数据集就地更新的结构化格式保存数据(HDF5 可能适用于此)。
标签: python performance save overwrite