csv 如何在python中从循环中返回变量

klsxnrf1  于 2023-03-05  发布在  Python
关注(0)|答案(3)|浏览(149)

我正在循环遍历一些csv文件,以从中获取两个特定的列值,以便稍后进行比较。
我将这些值存储在一个数组中,但是当我返回它时,我只得到第一个csv文件中的值,而不是所有的值。

def ls_values():
    for lsFile in listdir(ls_input_path):
        ls_lines = get_LS_data(ls_input_path + lsFile)

        checkValues_ls = []
        for ls_line in ls_lines:
            id_ls = ls_line['ID']
            ls = ls_line['ls']
            checkValues_ls.append({'id': id_ls, 'ls': ls})
        return checkValues_ls

当循环结束时,如何返回数组?
谢谢!

kzmpq1sx

kzmpq1sx1#

我会使用列表解析来简化它:

def ls_values():
    return [
        {k.lower(): ls_line[k] for k in ('ID', 'ls')}
        for lsFile in listdir(ls_input_path)
        for ls_line in get_LS_data(ls_input_path + lsFile)
    ]

但是修复原始代码的方法是将列表初始化和返回移到循环之外(分别在循环之前和之后):

def ls_values():
    checkValues_ls = []
    for lsFile in listdir(ls_input_path):
        ls_lines = get_LS_data(ls_input_path + lsFile)
        for ls_line in ls_lines:
            id_ls = ls_line['ID']
            ls = ls_line['ls']
            checkValues_ls.append({'id': id_ls, 'ls': ls})
    return checkValues_ls
kcwpcxri

kcwpcxri2#

def ls_values():
    checkValues_ls = [] # Move this so it's not reset for every item
    for lsFile in listdir(ls_input_path):
        ls_lines = get_LS_data(ls_input_path + lsFile)

        for ls_line in ls_lines:
            id_ls = ls_line['ID']
            ls = ls_line['ls']
            checkValues_ls.append({'id': id_ls, 'ls': ls})
    return checkValues_ls # Return it at the end!

希望这有帮助!

kyvafyod

kyvafyod3#

我假设你的程序是好的,但你没有得到预期的返回值。你只得到第一个csv文件数据,因为你在嵌套loop返回。所有你可以做的只是把return checkValues_lsfor loop的一面

def ls_values():
    checkValues_ls = []
    for lsFile in listdir(ls_input_path):
        ls_lines = get_LS_data(ls_input_path + lsFile)

        for ls_line in ls_lines:
            id_ls = ls_line['ID']
            ls = ls_line['ls']
            checkValues_ls.append({'id': id_ls, 'ls': ls})
    return checkValues_ls

希望这对你有用

相关问题