首页 > 解决方案 > url 函数只显示 1 行?

问题描述

我正在尝试创建一个 gui,它使用文件资源管理器选择 csv 文件,程序将通过文件从每一行获取 url 并执行 requests.get 但是我只得到一行输出,如屏幕截图所示

在此处输入图像描述

代码:

import csv
import requests
from gooey import Gooey, GooeyParser
from checkurl import url_status

@Gooey(program_name="My program")
def parse_args():
    UI = GooeyParser()
    UI.add_argument('data_file',
                        action='store',
                        widget='FileChooser',
                        help="Source Excel file")

    mainUI = UI.parse_args()
    return mainUI

if __name__ == '__main__':
    args = parse_args()
    input_file=args.data_file
    output= url_status(input_file)
    mainUI = parse_args()
    print(output)

功能:

import requests
import csv


def url_status(file_path):
    with open(file_path, "r") as file:
        reader = csv.reader(file, delimiter=",")
        my_list = list(reader)
        for row in my_list:
            name, url = row
            response = requests.get(url)
            result = "{}: {}".format(name, response)
        return result

标签: python

解决方案


这是因为您result每次进入循环时都会创建对象,并使用这一行为其分配新结果,result = "{}: {}".format(name, response)并且只返回最后一项。

您可以创建一个结果列表并将其返回并循环打印结果。

def url_status(file_path):
    with open(file_path, "r") as file:
        reader = csv.reader(file, delimiter=",")
        my_list = list(reader)
        results = []
        for row in my_list:
            name, url = row
            response = requests.get(url)
            results.append("{}: {}".format(name, response))
        return results

并通过迭代结果列表来一一打印结果:

if __name__ == '__main__':
    args = parse_args()
    input_file=args.data_file
    output = url_status(input_file)
    mainUI = parse_args()
    for out in output:
        print(out)

推荐阅读