Как добавить элементы одного списка в другой список, один за другим? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть CSV-файл с некоторым содержимым, как показано ниже:

name,x,y
N1,30.2356,12.5263
N2,30.2452,12.5300

... и это продолжается.

Это то, что я пробовал, я вызвал их из .csv и отдельно добавил в разные списки.

import csv

nn = []
xkoor = []
ykoor = []
coord = []
with open('C:/Users/Mert/Desktop/py/transformation/1.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        nn.append(row[0].split(','))
        xkoor.append(row[1].split(','))
        ykoor.append(row[2].split(','))

j = 1
for i in range(len(xkoor)):
    for j in range(len(ykoor)):

Я пытаюсь составить список как:

coord = [30.2356,12.5263],[30.2452,12.5300],....

и я не мог понять, как это сделать. Есть идеи?

Ответы [ 6 ]

2 голосов
/ 03 мая 2019

По умолчанию csv-reader должен разделять строки запятыми для вас:

import csv

with open('somefile.csv') as fh:
    reader = csv.reader(fh)
    for row in reader:
        print(row)

# outputs
['name', 'x', 'y']
['N1', '30.2356', '12.5263']
['N2', '30.2452', '12.5300 ']

Имея это в виду, если вы просто просматриваете координаты, вы можете использовать распаковку, чтобы получить x и y, затем создайте свой список, добавив кортежи:

import csv

coords = []

with open('somefile.csv') as fh:
    reader = csv.reader(fh)
    next(reader) # skips the headers
    for row in reader:
        name, x, y = row
        coords.append((float(x), float(y)))

# then you can iterate over that list like so
for x, y in coords:
    # do something

Координаты будут выглядеть следующим образом:

[(30.2356, 12.5263), (30.2452, 12.53)]
1 голос
/ 03 мая 2019

Вы не должны разбивать строки запятыми самостоятельно, поскольку csv.reader уже делает это за вас.Просто выполните итерацию по генератору csv.reader и распакуйте столбцы по желанию:

reader = csv.reader(f)
next(reader)
coord = [[float(x), float(y)] for _, x, y in reader]
0 голосов
/ 03 мая 2019

Если вы в oneliners:

data = """name,x,y
N1,30.2356,12.5263
N2,30.2452,12.5300"""

coords = [[x,y]
          for line in data.split("\n")[1:]
          for _,x,y in [line.split(",")]]
print(coords)

Это дает

[['30.2356', '12.5263'], ['30.2452', '12.5300']]
0 голосов
/ 03 мая 2019

Я бы сказал об этом примерно так:

import csv

# coordinates as strings 
with open('some.csv', 'r') as f:
    cord = [a for _, *a in csv.reader(f)]

# coordinates as floats
with open('some.csv', 'r') as f:
    cord = [[float(x), float(y)] for _, x, y in csv.reader(f)]

[print(xy) for xy in cord]
0 голосов
/ 03 мая 2019

Почему бы не pandas?!

  • read_csv подготовит ваш файл и преобразует его в фрейм данных
  • выполняет итерации по строкам и обращается к столбцам x и y
  • , которые объединяются всписок списка

и его проще использовать

    import pandas as pd
    df = pd.read_csv('1.csv', header=0)
    [[r.x, r.y] for _, r in df.iterrows()]

Результат:

[[30.2356, 12.5263], [30.2452, 12.53]]
0 голосов
/ 03 мая 2019

Похоже, вы слишком усложняете вещи.

Если все, что вы пытаетесь сделать, это создать массив координат, содержащий только значения X и Y, вот как вы могли бы это сделать:

import csv
coord = []
with open('C:/Users/Mert/Desktop/py/transformation/1.csv', 'r') as f:
    reader = csv.reader(f)
    for row in reader:
        rowlist = row.split(',')
        coord.append(rowlist[1:3])
print(coord)

Все, что вам нужно сделать, это извлечь подмножество для каждой строки и добавить его в ваш массив координат.Нет необходимости каждый раз вызывать разделение строк или создавать отдельные массивы для вашей оси.

KISS!

(Кроме того, совет: держите PII вне своих вопросов. Нет необходимостииспользуйте весь путь к файлу Windows, просто укажите, что это CSV-файл. Мне не нужно знать ваше имя, чтобы ответить на вопрос!)

...