【问题标题】:Reading two text files and using values from both files to call an API in Python读取两个文本文件并使用两个文件中的值在 Python 中调用 API
【发布时间】:2018-03-20 16:26:06
【问题描述】:

我正在尝试读取两个文本文件并使用两个文本文件中的值作为参数来调用 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 循环中完成。

【问题讨论】:

    标签: python file for-loop


    【解决方案1】:

    您遇到的问题是您的第一个 for 循环在您引用 self.k 之前已完全运行。这样做是遍历 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 设置为列表中最终值的问题。

    另一方面,您可能需要考虑将其压缩为单个函数,并避免在不需要的地方使用全局变量或类属性。这看起来像是不需要在类或类方法之间传递的临时数据。我会建议一种方法,在单个函数中实例化和引用该函数范围内的变量,然后返回或打印所需的数据。祝你好运!

    【讨论】:

      【解决方案2】:

      你的任务是 self.k 是第一个 for 循环的最后一个值。要获得所需的输出,您需要在每次迭代时将 self.k 存储在一个列表中,例如 k.append(..)

      不过,我不知道在迭代 2 个列表时,你会如何只使用一个 for 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-08
        • 1970-01-01
        相关资源
        最近更新 更多