Python,从txt文件中读取并拆分数据

时间:2015-11-11 14:46:54

标签: python python-2.7

这是我正在进行的编程练习。

所以我有这个文本文件(.txt),其行如下所示:

'X', ['X', 'a', ... , 'b'], 'There should be 5 of X in this vector'

我想要的是定义一个函数,将这些数据逐行读入python并将每一行作为三个变量发送回来,对于上面的这一特定行,我希望函数发送回来:

var = 'X'
vek = ['X', 'a', ... , 'b']
strng = 'There should be 5 of X in this vector'

这是我有多远

def reading(file, linenumber):

    text = open(file, 'r')
    data = text.readlines()


    return something
    text.close() 

当我把它变成python时,我希望在代码中使用这个返回的数据“计算变量(var)在向量/列表(vek)中重复的次数,然后打印出该数字以查看是否它同意声明(strng)。我想我可以处理这最后一部分,我只需要一些阅读和分裂的帮助。

另外我想说我是python的新手,2周前我看到了我的第一个代码。然而,我已经完成了升技MATLAB所以我很熟悉,而if-elif-else和我理解一些基本的编程。我使用的是2.7版本。

请耐心等待我:)

1 个答案:

答案 0 :(得分:3)

此行将整个文件读入"行" (字符串对象)

data = text.readlines()

现在,您需要在每个字符串上使用split(',')方法来分隔逗号分隔符上的每一行

for line in data:
    l = line.strip().split(',')
    var, vek, strng =  l[0], l[1:-1], l[-1]

这将返回文字字符串,这可能不是你想要的,例如

>>> var
"'@'"
>>> vek
[" ['list element1'", " 'list element2'", "'more list elements1']"]
>>> strg
" 'A string1'"

假设你想从文件中返回指定的linenumber,因为有效的python对象(例如,vek应该是一个列表,而不是一个看起来像列表的字符串),那么这应该工作:

def reading(path, linenumber):
    with open(path, 'r') as text:
        data = text.readlines()
    if linenumber <= len(data):
        l = data[linenumber-1].strip().split(',')
        # Here i use the map function:
        var, vek, strg = map(eval, [l[0], ','.join(l[1:-1]).strip(), l[-1]])

        # You could do each on its own line, like below:
        #var = eval(l[0])
        #vek = eval(','.join(l[1:-1]).strip()) ## converts this to python list obj.
        #strg = eval(l[-1])
        return var, vek, strg
    else:
        return (None, None, None)