Подтвердить что ты не робот

Импорт большой вкладки. Разделительный .txt файл в Python

У меня есть файл с разделителями табуляции .txt, который я пытаюсь импортировать в матричный массив в python того же формата, что и текстовый файл, как показано ниже:

123088 266 248 244 266 244 277

123425 275 244 241 289 248 231

123540 156 654 189 354 156 987

Обратите внимание, что есть много и много строк выше (примерно 200), которые я хочу передать в python и поддерживать такое же форматирование при создании из него массива.

Текущий код, который у меня есть для этого:

d = {}
with open('file name', 'rb') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter='\t')
    for row in csv_reader:
        d[row[0]] = row[1:]

который он немного делает то, что мне нужно, но не моя целевая цель. Я хочу закончить код, который я могу напечатать (d [0,3]), и он выплюнет 248. Я очень новичок в python, поэтому любая помощь очень ценится.

4b9b3361

Ответ 1

Сначала вы загружаете его в словарь, который не хочет получать список списков, который вы хотите.

Слишком просто использовать модуль csv для создания списка таких списков:

import csv
with open(path) as f:
    reader = csv.reader(f, delimiter="\t")
    d = list(reader)
print d[0][2] # 248

Это даст вам список списков строк, поэтому, если вы хотите получить номера, вам нужно будет преобразовать в int.

Тем не менее, если у вас есть большой массив (или вы делаете какие-либо числовые вычисления), вам следует рассмотреть возможность использования чего-то вроде numpy или pandas. Если вы хотите использовать numpy, вы можете сделать

import numpy as np
d = np.loadtxt(path, delimiter="\t")
print d[0,2] # 248

В качестве бонуса массивы numpy позволяют выполнять быстрые векторные/матричные операции. (также обратите внимание, что d[0][2] будет работать и с массивом numpy).

Ответ 2

Попробуйте следующее:

d = []
with open(sourcefile,'rb') as source:
    for line in source:
        fields = line.split('\t')
        d.append(fields)

print d[0][1] будет печатать 266

print d[0][2] (помните, что ваши массивы основаны на 0) будет печатать 248

--- EDIT ---

для вывода данных в том же формате, что и ваш вход:

for line in d:
    print "\t".join(line)