如何从python 3中的文件导入的字符串中添加数字?

时间:2018-02-27 22:40:14

标签: python-3.x

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 = []并附加到它并转换为浮点数。我怎么能这样做呢?

2 个答案:

答案 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

所有三个功能'输出将是相同的。