2014-10-10 3 views
1

Мне предоставлен файл данных с именем «плотность_air.dat», и мне нужно взять данные из каждого столбца и поместить их в свои собственные списки (т. Е. TList будет хранить значения в столбце начиная с «-10» и плотность будет содержать значения в столбце, начиная с «1,341». списки затем должны быть построены. у меня возникают проблемы, заселяющих списки с этими данными ... какой-либо помощи?Задание данных из входного файла из командной строки

from scitools.std import * 
import sys 
import pylab as pl 

inFile = sys.argv[-1] 

f = open(inFile, 'r') 

for x in range(4): 
    f.readline() 

tList = [] 
density = [] 

for line in f: 
    words = line.split() 
    for x in words: 
     tList.append(words[x]) 
     density.append(words[x]) 

f.close() 

plot(tList, density) 

файл данных:

# Density of air at different temperatures, at 1 atm pressure 
# Column 1: temperature in Celsius degrees 
# Column 2: density in kg/m^3 

-10  1.341 
-5  1.316 
0  1.293 
5  1.269 
10  1.247 
15  1.225 
20  1.204 
25  1.184 
30  1.164 
# Source: Wikipedia (keyword Density)  
+0

Когда вы зацикливаете «слова» (почему это называется «слова», кстати?) Вы получаете строки, а затем пытаетесь получить доступ к элементам списка, используя те строки, которые должны сгенерировать: 'TypeError: индексы списка должны быть целыми, а не str' – bernie

+0

У меня действительно нет конкретной причины, кроме вызова переменной, но я получаю эту ошибку. Как преобразовать значения в float или integer? – Spitzform

ответ

0

Попробуйте изменить цикл для:

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

for line in f: 
    temp,dens = line.split() 
    tList.append(int(temp)) 
    density.append(float(dens)) 
+0

После исправления этого кода я не выбрасывал никаких ошибок, однако, когда я пытаюсь распечатать списки, чтобы проверить содержимое, он возвращает пустые списки. – Spitzform

+0

Что-то в другом месте кода неверно. Я тестировал, что этот код делает то, что вы намереваетесь. – bernie

0

используется pylab для черчения, так почему бы не для чтения в ?

import sys 
import pylab as pl 

inFile = sys.argv[-1] 
temperature, density = pl.genfromtxt(inFile, unpack=True) 

pl.plot(temperature, densitiy, 'rx') 
pl.show() 

unpack=True необходима, потому что ваши данные aranged в столбцах. 'rx' рисует красные кресты, так как вы не хотите подключать очки.

Функция genfromtxt является частью numpy, которая загружена пилабом.

Я бы Recommand не использовать pylab но загружать соответствующие модули самостоятельно, в этом случае matplotlib.pyplot и numpy:

import sys 
import matplotlib.pyplot as plt 
import numpy as np 

inFile = sys.argv[-1] 
temperature, density = np.genfromtxt(inFile, unpack=True) 

plt.plot(temperature, densitiy, 'rx') 
plt.show() 

И не используйте from ... import * если у вас есть более чем 1 импорт

1

Там это numpy функция называется loadtxt, который загружает файлы в формате ASCII numpy массивы:

import numpy as np 
import matplotlib.pylab as plt 
import sys 

inFile = sys.argv[-1] 
temperature, density = np.loadtxt(inFile,unpack=True) 
plt.plot(temperature, density,'ko') 
plt.show() 
+1

Не знаете, почему кто-то отказался от этого. – Deditos

Смежные вопросы