python不读取fi的第二行

2024-10-02 22:31:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个包含以下内容的文本文件

url1,user1,xxxxxxxxx
url2,user2,yyyyyyyyy

我有一个代码块,它应该根据传递的env值(prodtest)获取值xxxxxxxxxyyyyyyyyy

#!/usr/bin/python
import os

class test:
    def __init__(self, env):
        self.env = env

    def func(self):
        res = []
        try:
            if os.path.exists("file.txt"):
                    try:
                        with open("file.txt", 'r') as fp:
                            for line in fp:
                                print("line is " +line)
                                line_api = line.split(',')[2]
                                print(line_api)
                                res.append(line_api)
                                print(res)
                                if self.env == "prod":
                                    self.api = res[0]
                                    print(self.api)
                                else:
                                    self.api = res[1]
                                    print(self.api)
                    except Exception as e:
                        print(e)
        except Exception as e:
            print(e)

执行else部分时的值

list index out of range

现在,当传递的envprod时,函数工作,但当值是test并且执行else部分时,list res的值只有xxxxxx,list中只有一个值,代码self.api = res[1]失败print(res)只打印['xxxxxxxxxxxx\n'],但当传递urlurl1print(res)只打印两个['xxxxxxxxxx\n','yyyyyyyyyyy\n']

我的代码怎么了


Tags: 代码testselfenvapiosasline
2条回答

代码的问题是,您用line_api = line.split(',')[2]拆分读入的每一行,[2]引用了该列表中存在的第三个元素xxxxxxxxxyyyyyyyyy,然后在调用self.api = res[0]时引用了该列表中的第一个(也是唯一的)元素

self.api = res[1]总是抛出一个错误,因为它永远不会出现在1元素列表中。我不确定else语句的目标是什么,但我建议使用DirtyBit的优雅解决方案

由于很难调试已经过多的代码,下面是一个较短的代码段:

使用^{}

列表.txt:

url1,user1,xxxxxxxxx
url2,user2,yyyyyyyyy

因此:

logFile = "list.txt"    

def getUrlValue(url):
    with open(logFile) as f:
        content = f.readlines()

    # you may also want to remove empty lines
    content = [l.strip() for l in content if l.strip()]    

    for line in content:
        if line.startswith(url):
            print(line.split(',')[2])

getUrlValue("url1")
getUrlValue("url2")

输出

xxxxxxxxx
yyyyyyyyy

相关问题 更多 >