csv 修改XYZ坐标文件中的Z值

2w2cym1i  于 11个月前  发布在  其他
关注(0)|答案(2)|浏览(139)

我有一个包含随机x,y,z坐标的文件。我试图写一些代码在z值前面插入一个“-"(负数)(因此给我一个负海拔)。
问题是,我将文件保存为.csv,不幸的是,这并没有添加任何分隔符,所以数据只是在每行一个单元格上,由空格分隔:x_y_z.“csv”文件包含超过100万个点,所以在Excel中编辑它是不可能的。
我已经尝试了几种方法来做我想做的事情,但是当我试图遍历每一行并写出数据时,我会摔倒。任何帮助或指针都将非常感谢。
我试过两种方法。第一种方法可能非常粗糙,但它似乎达到了我想要的效果,尽管它只在一行上有效。我不知道如何真正遍历每行。
第二个方法将采取第一行,并分离的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分裂出来,在那里我可以加上一个负数,但是在我卡住之后,

zy1mlcev

zy1mlcev1#

如果我理解你的问题,这个脚本应该工作:

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()

字符串

uyhoqukh

uyhoqukh2#

这就是我如何可视化您的数据文件

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])

相关问题