我正在尝试读取两个文本文件,并使用两者中的值作为参数来调用API。我有效地解决了这个问题。
以下是相关代码:
def read_addresses(self):
f = open("addresses.txt", "r")
f2 = open("cities.txt", "r")
self.addresses = f.readlines()
self.cities = f2.readlines()
def get_data(self):
for x in self.addresses:
sep = ' Placeholder'
self.k = x.split(sep, 1)[0]
self.k = re.sub('\s+',' ', self.k)
for x in self.cities:
sep = ' Placeholder'
self.j = x.split(sep, 1)[0]
self.j = re.sub('\s+', ' ', self.j)
self.city_state = self.j + ',' + ' TX'
try:
params = (
('address1', self.k
),
('address2', self.city_state),
)
print params
输入(cities.txt)
Unique City 1
Unique City 2
Unique City 3
输入(addresses.txt)
Unique Address 1
Unique Address 2
Unique Address 3
输出:
(('address1', 'Unique Address 3'), ('address2', 'Unique City 1 , TX'))
(('address1', 'Unique Address 3'), ('address2', 'Unique City 2 , TX'))
(('address1', 'Unique Address 3'), ('address2', 'Unique City 3, TX'))
我想要的输出:
(('address1', 'Unique Address 1'), ('address2', 'Unique City 1, TX'))
(('address1', 'Unique Address 2'), ('address2', 'Unique City 2, TX'))
(('address1', 'Unique Address 3'), ('address2', 'Unique City 3, TX'))
最有效的方法是什么?我想在一个for
循环中完成。
答案 0 :(得分:2)
您遇到的问题是,在您引用 self.k 之前,您的第一个for循环已完全运行。这样做是通过 self.addresses 进行迭代,并且每次都设置 self.k ,但是当您在下面的for循环中引用 self.k 时它只会保存列表中最后一个值的值,因为它不会同时迭代。
如果你想同时迭代这两个列表,你可以这样做
f = open("addresses.txt", "r")
f2 = open("cities.txt", "r")
self.addresses = f.readlines()
self.cities = f2.readlines()
for i,j in zip(self.addresses, self.cities):
print i
print j
print (i, j)
这样您就不会遇到将self.k设置为列表中的最终值的问题。
另一方面,您可能需要考虑将其压缩为单个函数,并避免在不需要的情况下使用全局变量或类属性。这看起来像是不需要在类或类方法之间传递的临时数据。我建议一种方法,在单个函数中,您实例化并引用该函数范围内的变量,然后返回或打印所需的数据。祝你好运!
答案 1 :(得分:0)
你的任务
self.k
是第一个for循环的最后一个值。要获得所需的输出,您需要将self.k存储在每个迭代的列表中,例如k.append(..)
但是,在迭代2个列表时,我不知道你是如何通过单个for循环逃脱的。