无法循环列表中的值

问题描述

我有一个场景,我想使用 python 读取文件

就像我们在 Unix shell 中使用 while 从文件中逐行循环读取一样

文件中的数据:ABC.txt

"A","B","C"
"E","F","A"
"S","H","DD","ADF"
"G","L","LI","LO","YAU"
"H","KK","AD"
"J","GH","KL"
"L","OP","AM"
"O","LA","WE"

我的代码

with open('ABC.txt',"r") as f:
    lines = f.readlines()
       parameter={ "empid":"3","empcd":"56","ide": [ lines ] }

我实际上正在寻找的是逐行读取文件并 应该作为参数传递给 "ide" : [ line ]

假设它经过第一次迭代,整个字符串-> "A","C"将被传递给“ide" : [ "A","C"]

parameter={ "empid":"3","ide": [ "A","C" ]   }

第二次迭代:

parameter={ "empid":"3","ide": [ "E","A" ]   }

第三次迭代:

parameter={ "empid":"3","ide": [ "S","ADF" ]   }

循环将继续直到从文件中读取所有记录

在 Unix 中我知道如何读取文件但不擅长使用 python 如何使用 python 实现这一点?

我的 Unix 代码

while read -r line 
do 
    var=`echo $line` 
    paramter = '{  "empid":"3","ide": [ $(( var )) ] }'
done < ABC.txt 

解决方法

您可以使用 ast.literal_eval 将行转换为列表。例如:

#include <stdio.h>
#include "mpi.h"

int main(int argc,char* argv[])
{
    int menum,nproc;
    int n,tag,num;
    MPI_Status info;
    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD,&menum);
    MPI_Comm_size(MPI_COMM_WORLD,&nproc);
    printf("menum:%d      nproc :%d",menum,nproc);
    if (menum == 0) {
        printf("\ninsert number: ");
        scanf_s(" %d",&n);
        tag = 10;
        MPI_Send(&n,1,MPI_INT,MPI_COMM_WORLD);
    }
    else {
        tag = 10;
        MPI_Recv(&n,MPI_COMM_WORLD,&info);
    }
    MPI_Get_count(&info,&num);
    MPI_Finalize();
    return 0;
}

打印:

from ast import literal_eval

with open("ABC.txt","r") as f_in:
    for line in f_in:
        print(
            {"empid": "3","empcd": "56","ide": literal_eval("[" + line + "]")}
        )
,

您可以使用json.

import json

for line in open("ABC.txt"):
     parameter = { "empid":"3","empcd":"56","ide": json.loads(f"[{line}]") }
     print(parameter)

,

您也可以使用 lambda 函数

fun1 = lambda x:x.strip().replace('"','').split(",")
new_lines = [fun1(i) for i in lines]
print(new_lines)

输出:

[['A','B','C'],['E','F','A'],['S','H','DD','ADF'],['G','L','LI','LO','YAU']]