#python
#python
Вопрос:
у меня есть текстовый файл с приведенным ниже содержимым
url1,user1,xxxxxxxxx
url2,user2,yyyyyyyyy
У меня есть блок кода, который должен получить значение xxxxxxxxx
или yyyyyyyyy
на основе переданного env
значения ( prod
or test
)
#!/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
Теперь, когда env
передано значение prod
, функция работает, но когда значение равно test
и else
часть выполнена, значение списка res
равно только xxxxxx
, в списке есть только одно значение, и код self.api = res[1]
завершается с ошибкой. print(res)
только отпечатки ['xxxxxxxxxxxxn']
, но когда url
прошло это url1
print(res)
только принты как [‘xxxxxxxxxxxп’, ‘yyyyyyyyy п’]
Что не так с моим кодом?
Комментарии:
1. Итак, цель состоит в том, чтобы найти соответствующее значение URL?
2. @DirtyBit цель состоит в том, чтобы найти
api
значение ..т.е. 3-е значение столбца в текстовом файле, значение должно быть 1-м значением столбца (xx), если url1 и 2-м значением столбца (yyy), если передается url23. Понял и уже опубликовал ответ, посмотрим, поможет ли это?
4. @DirtyBit я отредактировал свой код, чтобы он был более понятным
5. Обновление: проблема заключалась в проверке условия if, if должно быть вне цикла for.
Ответ №1:
Проблема с вашим кодом заключается в том, что вы разделяете каждую строку, в которой вы читаете, на line_api = line.split(',')[2]
и [2]
ссылается третий элемент, существующий в этом списке, который является xxxxxxxxx
or yyyyyyyyy
, затем при вызове self.api = res[0]
вы ссылаетесь на первый (и единственный) элемент в этом списке.
self.api = res[1]
всегда выдает ошибку, потому что она никогда не будет существовать в списке элементов 1. Я не уверен, какова была цель этого оператора else, но я бы предложил использовать элегантное решение DirtyBit
Ответ №2:
Поскольку сложно отлаживать ваш и без того избыточный код, вот более короткий фрагмент:
Используя startswith()
:
list.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