Разделить строковые значения на целое в питоне - PullRequest
0 голосов
/ 04 сентября 2018

У меня здесь другой номер. Это меняется каждый раз. Мне нужно создать многомерный массив, как
array[x][y] => x должно включать значение путем разбиения до ,, а y должно включать ' ' пусто.
Как я могу это сделать ? Спасибо.

dat.xyz
2,3,4,5,6,7,8,9 2,3,4,5,6,7,8,9 2,3,4,5,6,7,8,9 2,3,4,5,6,7,8,9

output = open('dat.xyz', 'r') # See the r
output_list = output.read().strip().split(',')

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

Вывод должен быть следующим

[[2, 3, 4, 5, 6, 7, 8, 9], 
[2, 3, 4, 5, 6, 7, 8, 9], 
[2, 3, 4, 5, 6, 7, 8, 9], 
[2, 3, 4, 5, 6, 7, 8, 9]]

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018
import numpy as np

# read file and split over whitespace
with open('dat.xyz', 'r') as f:
    rows = f.read()
    rows = rows.split(' ')

arr = []

# split each value in row over comma, then convert each element to integer
for row in rows:
    row = row.split(',')
    for i in range(len(row)):
        row[i] = int(row[i])
    arr.append(row)

# convert to array
arr = np.array(arr)

arr

Выход:

array([[2, 3, 4, 5, 6, 7, 8, 9],
       [2, 3, 4, 5, 6, 7, 8, 9],
       [2, 3, 4, 5, 6, 7, 8, 9],
       [2, 3, 4, 5, 6, 7, 8, 9]])
0 голосов
/ 04 сентября 2018

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

>>> rows = "2,3,4,5,6,7,8,9 2,3,4,5,6,7,8,9 2,3,4,5,6,7,8,9 2,3,4,5,6,7,8,9".split(' ')
>>> rows
['2,3,4,5,6,7,8,9', '2,3,4,5,6,7,8,9', '2,3,4,5,6,7,8,9', '2,3,4,5,6,7,8,9']
>>> [row.split(',') for row in rows]
[['2', '3', '4', '5', '6', '7', '8', '9'], ['2', '3', '4', '5', '6', '7', '8', '9'], ['2', '3', '4', '5', '6', '7', '8', '9'], ['2', '3', '4', '5', '6', '7', '8', '9']]

Вы также можете преобразовать эти ячейки в целые числа:

>>> [[int(cell) for cell in row.split(',')] for row in rows]
[[2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9], [2, 3, 4, 5, 6, 7, 8, 9]]

или пусть numpy сделает преобразование для вас:

>>> import numpy as np
>>> np.array([row.split(',') for row in rows], np.int)
array([[2, 3, 4, 5, 6, 7, 8, 9],
       [2, 3, 4, 5, 6, 7, 8, 9],
       [2, 3, 4, 5, 6, 7, 8, 9],
       [2, 3, 4, 5, 6, 7, 8, 9]])
...