gpt4 book ai didi

python - 我怎样才能加速这个真正基本的Python脚本来偏移数字行

转载 作者:行者123 更新时间:2023-11-30 23:35:57 25 4
gpt4 key购买 nike

我有一个简单的文本文件,其中包含按本示例所示以空格分隔的 ASCII 文本数字。

150604849   
319865.301865 5810822.964432 -96.425797 -1610
319734.172256 5810916.074753 -52.490280 -122
319730.912949 5810918.098465 -61.864395 -171
319688.240891 5810889.851608 -0.339890 -1790
*<continues like this for millions of lines>*

基本上我想按原样复制第一行,然后对于所有后续行,我想偏移第一个值(x),偏移第二个值(y),保持第三个值不变并偏移最后一个数字的一​​半.

我拼凑了以下代码作为Python学习经验(如果它粗鲁和冒犯,我深表歉意,我真的没有冒犯的意思)并且它工作正常。然而,我使用它的输入文件大小有几 GB,我想知道是否有方法可以加快执行速度。目前,对于 740 MB 的文件,需要 2 分 21 秒

import glob

#offset values
offsetx = -306000
offsety = -5806000

files = glob.glob('*.pts')
for file in files:
currentFile = open(file, "r")
out = open(file[:-4]+"_RGB_moved.pts", "w")
firstline = str(currentFile.readline())
out.write(str(firstline.split()[0]))

while 1:
lines = currentFile.readlines(100000)
if not lines:
break
for line in lines:
out.write('\n')
words = line.split()
newwords = [str(float(words[0])+offsetx), str(float(words[1])+offsety), str(float(words[2])), str((int(words[3])+2050)/2)]
out.write(" ".join(newwords))

非常感谢

最佳答案

不要使用.readlines()。直接使用文件作为迭代器:

for file in files:
with open(file, "r") as currentfile, open(file[:-4]+"_RGB_moved.pts", "w") as out:
firstline = next(currentFile)
out.write(firstline.split(None, 1)[0])

for line in currentfile:
out.write('\n')
words = line.split()
newwords = [str(float(words[0])+offsetx), str(float(words[1])+offsety), words[2], str((int(words[3]) + 2050) / 2)]
out.write(" ".join(newwords))

我还添加了一些 Python 最佳实践,您不需要将 words[2] 转换为 float ,然后再次转换回字符串。

您还可以考虑使用 csv 模块,它可以处理 C 代码中的分割和重新连接行:

import csv

for file in files:
with open(file, "rb") as currentfile, open(file[:-4]+"_RGB_moved.pts", "wb") as out:
reader = csv.reader(currentfile, delimiter=' ', quoting=csv.QUOTE_NONE)
writer = csv.writer(out, delimiter=' ', quoting=csv.QUOTE_NONE)

out.writerow(next(reader)[0])

for row in reader:
newrow = [str(float(row[0])+offsetx), str(float(row[1])+offsety), row[2], str((int(row[3]) + 2050) / 2)]
out.writerow(newrow)

关于python - 我怎样才能加速这个真正基本的Python脚本来偏移数字行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16883790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com