这是我正在进行的编程练习。
所以我有这个文本文件(.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版本。
请耐心等待我:)
答案 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)