Изменить значение Z в файле координат XYZ

У меня есть файл, содержащий случайные координаты x,y,z. Я пытаюсь написать код, чтобы вставить "-"(отрицательное число) перед значением z (что дает мне отрицательное значение высоты).

проблема в том, что я сохраняю файл как.csv, к сожалению, это не добавляет никаких разделителей, поэтому данные находятся только в одной ячейке в строке, разделенной пробелом: x_y_z. Файл "csv" содержит более 1 миллиона точек, поэтому о его редактировании в Excel не может быть и речи.

Я пробовал несколько способов делать то, что хочу, но я падаю, пытаясь перебрать каждую строку и записать данные. Любая помощь или указатели будут очень благодарны.

Я пробовал 2 вещи. первый метод, вероятно, чрезвычайно груб, но он, кажется, достигает того, что я хочу, хотя он работает только на одной строке. Я не знаю, как перебирать каждую строку.

Второй метод возьмет первую строку и разделит 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, где я могу добавить минус, но после того, как я застрял

2 ответа

Если я хорошо понял вашу проблему, этот скрипт должен работать:

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])
Другие вопросы по тегам