修改 XYZ 坐标文件中的 Z 值



我有包含随机x,y,z坐标的文件。我正在尝试编写一些代码以在 z 值前面插入"-"(负数((因此给我一个负提升(。

问题是,我将文件另存为.csv,不幸的是,这不会添加任何分隔符,因此数据仅在每行一个由空格分隔的单元格上:x_y_z。"csv"文件包含超过 100 万个点,因此在 excel 中编辑它是不可能的。

我已经尝试了几种方法来做我想做的事情,但是在尝试遍历每一行并写出数据时,我遇到了困难。任何帮助或指示将不胜感激。

我尝试了两件事。 第一种方法可能非常粗糙,但它似乎达到了我想要的,尽管它仅适用于 1 行。我不知道如何真正遍历每一行。

第二种方法将取第一行,并将 X、Y 和 Z 分成不同的变量,之后我就迷路了!

#First method:
import csv
inputfile = csv.reader(open ("\wk.csv", 'r'))
for row in inputfile:
rowstring = str(row)
x1 = rowstring[2:11]
y1 = rowstring[12:22]
z1 = "-" + rowstring[23:29]
xynz = x1 + " " + y1 + " " + z1

#second method:
with open ("\wk.csv", 'r+') as f:
for l in f:
x2, y2, z2 = l.split()
z3 = "-"+z2

第一种方法将只为我提供一行所需的结果。['555555.55', '4444444.44', '-333.33']

第二种方法拆分出我可以添加负数的 Z,但在我卡住之后

如果我很好地理解你的问题,这个脚本应该可以工作:

input_file = 'wk.csv'
output_file = 'new_wk.csv'
# Reading input
f = open(input_file, 'r')
rows = f.read().split('n')
if '' in rows: # remove last blank line if needed
rows.remove('')
f.close()
# Writing output
f = open(output_file, 'w')
for row in rows: # loop over your million rows
print(row)
x, y, z = row.split(' ')
z = '-'+z    # editing z
f.write('{} {} {}n'.format(x, y, z))
f.close()

这就是我可视化您的数据文件的方式

x1,y1,z1
x2,y2,z2
x3,y3,z3
.
.
.

我有点困惑你如何描述你的数据文件。它是由空格分隔的吗?如果是这样,您可以像这样读取数据。

with open('input.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=' ')

如果它实际上由 分隔,则执行。

with open('employee_birthday.txt') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')

您可以做的是像这样从每行中循环并拉取 x y 和 z。

import csv
with open('new.csv', mode='w') as out_file:
csv_writer = csv.writer(out_file, delimiter=',')

#initialize new csv file.
for x, y, z in input_file:
#I assume you want to read them as string to add the -
x = str(x)
y = str(y)
z = str(z)
# add the -
z = "-" + z
csv_writer.writerow([x, y, z])

最新更新