Импорт данных и имен переменных из текстового файла в Python

У меня есть текстовый файл, содержащий данные моделирования (60 столбцов, 100 тыс. Строк):

abc 1 11 111 2 22 222 3 33 333 4 44 444 

… где в первой строке находятся имена переменных, а внизу (в столбцах) – соответствующие данные (тип float).

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

 print(b) 

Мне нужно получить значения из второго столбца.

Я знаю, как импортировать данные:

 data=np.genfromtxt("1.txt", unpack=True, skiprows = 1) 

Назначить переменные «вручную»:

 a,b,c=np.genfromtxt("1.txt", unpack=True, skiprows = 1) 

Но у меня возникают проблемы с получением имен переменных:

 reader = csv.reader(open("1.txt", "rt")) for row in reader: list.append(row) variables=(list[0]) 

Как я могу изменить этот код, чтобы получить все имена переменных из первой строки и назначить их импортированным массивам?

3 Solutions collect form web for “Импорт данных и имен переменных из текстового файла в Python”

Вместо того, чтобы пытаться назначать имена, вы можете подумать об использовании ассоциативного массива , который известен в Python как dict , для хранения ваших переменных и их значений. Тогда код мог бы выглядеть примерно так (заимствуя либерально из документов csv ):

 import csv with open('1.txt', 'rt') as f: reader = csv.reader(f, delimiter=' ', skipinitialspace=True) lineData = list() cols = next(reader) print(cols) for col in cols: # Create a list in lineData for each column of data. lineData.append(list()) for line in reader: for i in xrange(0, len(lineData)): # Copy the data from the line into the correct columns. lineData[i].append(line[i]) data = dict() for i in xrange(0, len(cols)): # Create each key in the dict with the data in its column. data[cols[i]] = lineData[i] print(data) 

data затем содержат каждую из ваших переменных, к которым можно получить доступ через data['varname'] .

Например, вы можете сделать data['a'] чтобы получить список ['1', '2', '3', '4'] учитывая введенные вами данные.

Я думаю, что попытка создания имен на основе данных в вашем документе может быть довольно неудобным способом сделать это по сравнению с методом на основе dict, показанным выше. Если вы действительно хотите это сделать, вы можете взглянуть на размышления в Python (тема, о которой я ничего не знаю).

Ответ таков: вы не хотите этого делать .

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

 data = { "a": [1, 2, 3, 4], "b": [11, 22, 33, 44], "c": [111, 222, 333, 444], } 

… которые вы можете легко получить, используя, например, data["a"] .

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

Стоит отметить, что это намеренно затруднительно в Python, потому что, если ваш код не знает имена ваших переменных, они по определению являются данными, а не логическими, и их следует рассматривать как таковые.

Если вы еще не уверены, вот хорошая статья на эту тему:

Глупые идеи Python: почему вы не хотите динамически создавать переменные

Благодаря @ andyg0808 и @Zero Piraeus я нашел другое решение. Для меня наиболее подходящим является использование библиотеки анализа данных Pandas.

  import pandas as pd data=pd.read_csv("1.txt", delim_whitespace=True, skipinitialspace=True) result=data["a"]*data["b"]*3 print(result) 0 33 1 132 2 297 3 528 

… где 0,1,2,3 – индекс строки.

  • -9999 как отсутствующее значение с numpy.genfromtxt ()
  • Чтение данных в массив numpy из текстового файла
  • Как читать csv в массив записей в numpy?
  • Numpy.genfromtxt удаляет квадратные скобки в dtype.names
  • Как загрузить гетерогенные данные (np.genfromtxt) в виде 2D-массива?
  •  
    Interesting Posts for Van-Lav
    Python - лучший язык программирования в мире.