def equake_readf(fname):
datali = open('equakes50f.txt', 'r')
datali.readline()
li = [ ]
for line in datali:
line = line.split(",")
num = line[4]
print(num)
我有一个函数equake_readf,它打开一个文件,其中包含有关地震的信息列表。它由行格式化:
time,latitude,longitude,depth,mag,magType,nst,gap,dmin,rms,net,id,updated,place,type,horizontalError,depthError,magError,magNst,status,locationSource,magSource
2010-07-28T16:12:05.610Z,43.756,-125.815,10,5.2,mwc,193,143.9,,0.93,us,usp000hh0t,2017-08-01T16:34:36.951Z,"off the coast of Oregon",earthquake,,,,,reviewed,us,gcmt
从这个函数我得到的每个数字都在一个新的行中:
5.2
5.1
6
5.9
5.6
5.7
5
5
5.2
5.1
5.4
5.2
5.6
我想创建一个列表,这样我就可以通过调用mean,median,mode的下一个函数来运行列表。我已经尝试创建li = []并附加到它并转换为浮点数。我怎么能这样做呢?
答案 0 :(得分:0)
我不明白为什么最简单的答案,就是你自己提到的答案,不会起作用。
这是您的代码,但有一些改进
import csv
def equake_readf(fname):
datali = open('equakes50f.txt', 'r')
reader = csv.reader(datali)
next(reader)
li = []
for row in reader:
num = row[4]
li.append(float(num))
return li
答案 1 :(得分:0)
您可以使用pandas
模块:
import pandas as pd
def equake_readf(fname):
df = pd.read_csv(fname)
return df["mag"].tolist()
li = equake_readf("equakes50f.txt")
print(li)
输出类似于:
[5.2, 5.1, 6.0, 5.9]
修改强>
如果你想坚持自己的方式,你需要使用readlines()
这样的方法:
def equake_readf(fname):
datali = open(fname, 'r')
lines = datali.readlines()
li = []
for line in lines[1:]: # [1:] statement deletes the first item which is 'mag' in this case
columns = line.split(",")
li.append(columns[4])
return li
此外,您可以尝试列表理解:
def equake_readf(fname):
with open(fname) as f:
ret_list = [line.split(",")[4] for line in f.readlines()[1:]]
return ret_list
所有三个功能'输出将是相同的。