Как записать списки в CSV с помощью Python - PullRequest
0 голосов
/ 24 апреля 2018

Я пытаюсь записать два списка в CSV-файл. Я попробовал пару решений, перечисленных здесь: Как записать данные из двух списков в столбцы в CSV? Решение izip не работает для меня. Когда я попробовал это, я получил эту ошибку:

ImportError: cannot import name 'izip'

Мне удалось импортировать itertools, только не изип.

Затем я попробовал zip-решение, но по какой-то причине оно стерло содержимое моего исходного csv-файла. Оригинальный файл есть, но теперь в нем ничего нет. Это точно не то, ради чего я иду!

Это то, что у меня сейчас есть:

for eas,nor in zip(xUTM, yUTM):
    cor=(utm.to_latlon(eas, nor, 20, 'Q'))
    treecor.append(cor)
l=list(map(list,zip(*treecor)))
lat=l[0]
lon=l[1]

Я хотел бы создать дубликат моего исходного файла и добавить столбец 'lat' и столбец 'lon' в конец дубликата (в этом порядке). Есть ли альтернатива решениям, которые я пробовал до сих пор?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Я не смог заставить ни одно из найденных решений работать.Наконец мы с другом смогли придумать это:

with open('cord_out.tsv','w')as fh:
    for i in treecor:
        print(i[0],'\t',i[1],file=fh)
0 голосов
/ 24 апреля 2018

Вы можете написать treecor, используя zip и генератор, чтобы применить функцию отображения. Обычно это предпочтительнее функции map.

treecor = [utm.to_latlon(eas, nor, 20, 'Q') for eas, nor in zip(xUTM, yUTM)]

Или пропустите этот шаг полностью и вычисляйте только широту / долготу, как вам нужно. Поскольку вы добавляете столбцы, вам нужно полностью перезаписать файл CSV. И это лучше всего сделать с временным файлом, который вы переименуете в случае успеха. Используйте zip для объединения строк из CSV с элементами в списках utm:

import os

xUTM, yUTM = get_utm_lists()

filename = 'orig.csv'

try:
    with open(filename) as in_fp, open(filename + ".tmp", "w") as out_fp:
        in_csv = csv.reader(in_fp)
        out_csv = csv.writer(out_fp)
        for row, eas, nor in zip(in_csv, xUTM, yUTM):
            out_csv.write(row + *utm.to_latlon(eas, nor, 20, 'Q'))
    os.rename(filename + ".tmp", filename)
except OSError as e:
    print(e)
...