Импорт большой вкладки. Разделительный .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, поэтому любая помощь очень ценится.
Ответы
Ответ 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)