Python从文件读入多个列表

时间:2014-03-07 12:28:57

标签: python list file-io

我认为有人不能指出我正确的方向?

我有点想知道如何最好地从文本文件中提取值然后将它们分解并将它们放回到与其对应值相同的位置的列表中。

我很抱歉如果不清楚,也许这会让它更清晰。这是输出文件的代码:

#while loop       
with open('values', 'a') as o:
             o.write("{}, {}, {}, {}, {}, {}, {}\n".format(FirstName[currentRow],Surname[currentRow], AnotherValue[currentRow], numberA, numberB))
currentRow+1

我想反过来采取上面格式化的值,并将它们放回到同一个地方的列表中。类似的东西:

#while loop
with open('values', 'r') as o:
             o.read("{}, {}, {}, {}, {}, {}, {}\n".format(FirstName[currentRow],Surname[currentRow], AnotherValue[currentRow], numberA, numberB))
currentRow +1

由于

4 个答案:

答案 0 :(得分:0)

我认为最好的相应方法是在阅读的文本中调用split

FirstName[currentRow],Surname[currentRow], AnotherValue[currentRow], numberA, numberB = o.read().strip().split(", ")

没有真正等效的格式化输入,例如C中的scanf

答案 1 :(得分:0)

您应该可以执行以下操作:

first_names = []
surnames = []
another_values = []
number_as = []
number_bs = []

for line in open('values', 'r'):
    fn, sn, av, na, nb = line.strip().split(',')
    first_names.append(fn)
    surnames.append(sn)
    another_values.append(av)
    number_as.append(float(na))
    number_bs.append(float(nb))

for line in open()部分迭代文件中的每一行,fn, sn, av, na, nb = line.strip().split(',')位在每行末尾删除换行符\n并将其拆分为逗号。

在实践中虽然我可能会使用CSV ModulePandas之类的东西来更好地处理边缘情况。例如,如果名称或其他值中包含逗号,则上述方法将中断!

答案 2 :(得分:0)

with open('values.txt', 'r') as f:
    first_names, last_names, another_values, a_values, b_values = \
    (list(tt) for tt in zip(*[l.rstrip().split(',') for l in f]))

除非您需要更新,否则列表转换list(tt) for tt in也是不必要的。

可以使用izip中的itertools代替zip

答案 3 :(得分:0)

如果允许您决定文件格式,则以json格式保存和加载可能很有用。

import json

#test data
FirstName    = range(5)
Surname      = range(5,11)
AnotherValue = range(11,16)
numberAvec   = range(16,21)
numberBvec   = range(21,26)

#save
all = [FirstName,Surname,AnotherValue,numberAvec,numberBvec]
with open("values.txt","w") as fp:
    json.dump(all,fp)

#load
with open("values.txt","r") as fp:
    FirstName,Surname,AnotherValue,numberAvec,numberBvec = json.load(fp)

values.txt:

[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, 24, 25]]