利用课程的新手。
如果我有3个不同的文件:
#test1.txt:
a 100 xxx
b 200 fff
a 200 xxx
c 500 fff
a 200 www
test2.txt:
123 msg1 data2
123 msg1 data3
125 msg1 data2
123 msg2 data5
128 msg3 data2
test3.txt:
jan 5 79
jan 5 80
dec 5 79
dec 12 79
feb 5 80
我希望在迭代文件的同时填充1个类中的所有数据,这是正确的方法吗?
我很难弄清楚如何填充所有数据,而不会根据任何单一参数进行覆盖和提取。
class DInput:
def set_f0(self, f0):
self.f0=f0
self.f1,f2,f3,f4,f5,f6,f7,f8=[]
def add_f1(self, f1):
self.f1.append(f1)
def add_f2(self, f2):
self.f2.append(f2)
def add_f3(self, f3):
self.f3.append(f3)
def add_f4(self, f4):
self.f4.append(f4)
def add_f5(self, f5):
self.f5.append(f5)
def add_f6(self, f6):
self.f6.append(f6)
def add_f7(self, f7):
self.f7.append(f7)
def add_f8(self, f8):
self.f8.append(f8)
call = DInput()
with open('test1.txt','r') as file1, open('test2.txt','r') as file2, open('test3.txt','r') as file3:
for line in file1:
f0,f1,f2=line.split()
call.set_f0(f0)
call.add_f1(f1)
call.add_f2(f2)
for line in file2:
f3,f4,f5=line.split()
call.add_f3(f3)
call.add_f4(f4)
call.add_f5(f5)
for line in file3:
f6,f7,f8=line.split()
call.add_f6(f6)
call.add_f7(f7)
call.add_f8(f8)
答案 0 :(得分:1)
告诉你要做什么有点难,但似乎根本不需要课程。
我认为你的所有文件都有相同数量的行,而你基本上是在尝试合并它们。
如果那是你的情况,也许你正在寻找类似的东西:
from collections import defaultdict
files = ['test1.txt', 'test2.txt', 'test3.txt']
data = defaultdict(list)
for filename in files:
with open(filename) as f:
for i,line in enumerate(f):
data[i].extend(line.split())
我在你的示例文件上测试它,我得到了:
>>> for i in sorted(data):
... print(data[i])
['a', '100', 'xxx', '123', 'msg1', 'data2', 'jan', '5', '79']
['b', '200', 'fff', '123', 'msg1', 'data3', 'jan', '5', '80']
['a', '200', 'xxx', '125', 'msg1', 'data2', 'dec', '5', '79']
['c', '500', 'fff', '123', 'msg2', 'data5', 'dec', '12', '79']
['a', '200', 'www', '128', 'msg3', 'data2', 'feb', '5', '80']
答案 1 :(得分:1)
我认为您获取和设置数据的方式比需要的更复杂。例如,要获取为列表中的每个实例对象设置的所有元素,我将使用以下内容:
from itertools import izip, chain
files = [open('test{0}.txt'.format(i)) for i in range(1,4)]
for lines in izip(*files):
lines = chain.from_iterable([line.strip().split()
for line in lines])
print list(lines)
示例输出:
['a', '100', 'xxx', '123', 'msg1', 'data2', 'jan', '5', '79']
['b', '200', 'fff', '123', 'msg1', 'data3', 'jan', '5', '80']
['a', '200', 'xxx', '125', 'msg1', 'data2', 'dec', '5', '79']
['c', '500', 'fff', '123', 'msg2', 'data5', 'dec', '12', '79']
['a', '200', 'www', '128', 'msg3', 'data2', 'feb', '5', '80']