用python从文件中读取列表格式的数据

用python从文件中读取列表格式的数据,python,list,Python,List,我知道这对你们大家来说一定是个简单的问题。我有一个文本文件,其中包含以下面列表格式编写的测试用例 [["arg1", "arg2", "arg3"], "Fail"] [["arg1", "arg2", "arg4"], "Pass"] 我想在这样一个列表中读取这个文件,我可以打印list1[1]=>Fail 谢谢你的帮助 下面的代码示例如何: 我很喜欢这个 示例myfile.txt: [["arg1", "arg2", "arg3"], "Fail"] [["arg1", "arg2",

我知道这对你们大家来说一定是个简单的问题。我有一个文本文件,其中包含以下面列表格式编写的测试用例

[["arg1", "arg2", "arg3"], "Fail"]

[["arg1", "arg2", "arg4"], "Pass"]

我想在这样一个列表中读取这个文件,我可以打印list1[1]=>Fail


谢谢你的帮助

下面的代码示例如何:

我很喜欢这个

示例myfile.txt:

[["arg1", "arg2", "arg3"], "Fail"]
[["arg1", "arg2", "arg4"], "Pass"]
主python文件

file1 = open('myfile.txt', 'r') 
count = 0

while True: 
    count += 1

    # Get next line from file 
    list = file1.readline()
    if not list: 
        break
    #convert string to list
    res = list.strip('][').split(', ') 
    print(res[1])
逐行读取文件后,使用拆分将列表字符串转换为列表。

您有一个.txt文件。 行的格式为[[arg1、arg2、arg3……等],失败/通过] 方法是使用正则表达式查找双引号之间的所有文本并附加到列表中。最后一个作为失败/通过,其余为args

进口稀土 结果=[] 打开“text.txt”,将“r”作为f: 对于f中的行: match=re.findall\.*?\,line.strip 结果.追加[match[:-1],match[-1]] 打印结果 打印结果[0][0] 打印结果[0][1] 示例输入.txt文件

输出

[[['arg1', 'arg2', 'arg3', 'arg4'], 'Fail'], [['arg1', 'arg2', 'arg4'], 'Pass']]
['arg1', 'arg2', 'arg3', 'arg4']
Fail

您可以编写一些非常简单的字符串操作代码,正如大家在这里提供的那样。我就是这样做的:

text = """
[["arg1", "arg2", "arg3"], "Fail"]
[["arg1", "arg2", "arg4"], "Pass"]
"""

for line in text.strip().splitlines():
    line = line.replace('[', '')
    line = line.replace(']', '')
    print line.split(',')[-1].strip()

这并不漂亮,但如果你想在生产中实现这一点,你可以用很多更好的方法来实现。

只要使用eval,它的内部python函数,你就不需要库了

例如:

lists = []
line1 = '[["arg1", "arg2", "arg3"], "Fail"]'
line2 = '[["arg1", "arg2", "arg4"], "Pass"]'
# Evaluate Lines
exLine1 = eval(line1)
exLine2 = eval(line2)
# Append Lines to lists
lists.append(exLine1)
lists.append(exLine2)
# Testing Example of your use case
print(str(exLine1[1] == "Fail"))
import ast

with open('list.txt') as f:
    lines = f.readlines()

data = [ast.literal_eval(line) for line in lines]

for item in data:
    print(item[1])
只需将此示例转换为您正在使用的for循环,它将快速而简单

您可以使用ast.literal\u eval将字符串行安全地转换为python表达式

例如:

lists = []
line1 = '[["arg1", "arg2", "arg3"], "Fail"]'
line2 = '[["arg1", "arg2", "arg4"], "Pass"]'
# Evaluate Lines
exLine1 = eval(line1)
exLine2 = eval(line2)
# Append Lines to lists
lists.append(exLine1)
lists.append(exLine2)
# Testing Example of your use case
print(str(exLine1[1] == "Fail"))
import ast

with open('list.txt') as f:
    lines = f.readlines()

data = [ast.literal_eval(line) for line in lines]

for item in data:
    print(item[1])

您可以尝试以下方法:

with open("test.txt", "r") as test_file:
content = test_file.readlines()

print(content)
print(type(content))

for data in content:
    print(ast.literal_eval(data)[1])

print("*" * 30)
for i in range(1, len(content)+1):
    print(i)
输出:

index:  0

[["arg1", "arg2", "arg3"], "Fail"]

index: 1

[["arg1", "arg2", "arg4"], "Pass"]

您需要类似:[arg1,arg2,arg3]=>失败?不,我希望输出类似,输出列表[1]失败。我尝试了,但它不起作用。。。谢谢你的帮助。你好,迪帕克,谢谢你的尝试。但您正在读取一个列表中的所有值,而我需要文本文件中的列表格式。请参阅此链接以将列表的字符串表示形式转换为列表。我喜欢你的方法。很好尝试ev350。谢谢你的帮助。谢谢,Sergey Tolokonnikov,我尝试了这个模块,但是犯了一些愚蠢的错误。谢谢,Nasreen尝试了,但是这个解决方案没有给我正确的元素。你绝对不能在python中使用eval。阅读
1
2