2016-06-22 6 views
0

자기가 인정한 PHP 코더가 파이썬 측으로 향하고 머리가 아프다. 나는 단순하다고 생각하는 것을하려고 노력하고있다. 파일을 읽은 다음 (작업 한 후) 각 줄 입력을 변수에 저장 한 다음 문자열 변수를 기존 텍스트 문자열로 평가합니다. 여기 Python 3 문자열의 변수를 확인하십시오.

내가 가진 무엇?

with open('./users.txt') as users: 
    for user in users: 
     conn.request("GET", "/vmrest/users?query=(alias%2520is%2520{})".format(user), headers) 
     res = conn.getresponse() 
     data = res.read() 

내가 원하는 건 내 사용자 변수의 값이 바로 바로/vmrest/사용자 쿼리 = (별칭 % 2520is "다음에 문자열의 끝에 배치되어야한다 % 2520 user variable here ", 헤더)

감사

편집 미안 무슨 일이 일어 났는지 포함하지 않았다 실현. 아래는 내가 실행할 때 얻는 피드백입니다. 위의 예외 처리시

Traceback (most recent call last): 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/http/client.py", line 885, in send 
self.sock.sendall(data) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/ssl.py", line 886, in sendall 
v = self.send(data[count:]) 
TypeError: unhashable type: 'slice' 

는 다른 예외가 발생했습니다

Traceback (most recent call last): 
File "amer-unity.py", line 12, in <module> 
conn.request("GET", "/vmrest/users?query=(alias%2520is%2520{})".format(user), headers) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/http/client.py", line 1083, in request 
self._send_request(method, url, body, headers) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/http/client.py", line 1128, in _send_request 
self.endheaders(body) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/http/client.py", line 1079, in endheaders 
self._send_output(message_body) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/http/client.py", line 913, in _send_output 
self.send(message_body) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/http/client.py", line 889, in send 
self.sock.sendall(d) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/ssl.py", line 886, in sendall 
v = self.send(data[count:]) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/ssl.py", line 856, in send 
return self._sslobj.write(data) 
File "/opt/rh/rh-python35/root/usr/lib64/python3.5/ssl.py", line 581, in write 
return self._sslobj.write(data) 
TypeError: a bytes-like object is required, not 'str' 
+3

문제는 무엇입니까? – polku

+1

원하는 동작이 매우 명확하지만 코드가 작동하지 않아야하는 이유가 표시되지 않습니다. 현재의 행동은 무엇입니까? (사이드 노트 : 웹 요청을 보내기 위해 ['requests'] (http://docs.python-requests.org/en/master/)를 고려하십시오. 파이썬 표준 lib보다 * 많이 * 낫습니다.) – jpmc26

+1

형식화 된 문자열 및 당신이 무엇을 참조하십시오. 그것은 작동해야합니다. 사용자 ('user.strip()'의 주변 공백을 모두 없애기를 원할 것입니다. – acushner

답변

1

첫째, @acushner에서 알 수 있듯이, 당신은 당신의 라인 strip해야합니다

"/vmrest/users?query=(alias%2520is%2520{})".format(user.strip()) 

이 어떤 선행을 제거 할 것 또는 user 문자열의 후행 공백 파이썬에서 파일의 라인을 읽을 때, 라인 터미네이터 (아마 * nix에 있기 때문에 아마 '\n')를 포함한다는 것을 기억하십시오. 이렇게하면 제거됩니다.

또한 빈 줄을 생략 할 수 있습니다 :

user = user.strip() 
if user: 
    conn.request("GET", "/vmrest/users?query=(alias%2520is%2520{})".format(user), headers) 
    # ... 

을 그게 해결되지 않으면, 내가보기 엔 requests로 전환하는 것이 좋습니다. 웹 요청을 보내고 응답을받는 데 더 간단한 라이브러리입니다. 그것은 일반적으로 "그냥"큰 호들갑없이 작동합니다. 그것은 제 3 자, 그래서 당신은 먼저 설치해야합니다

pip install requests 

그럼 당신은 다음과 같이 사용합니다 : 제로 연결을 설정하기위한 코드를 설정이

import requests 

# ... some other code ... 

with open('./users.txt') as users: 
    for user in users: 
     user = user.strip() 
     if user: 
      res = requests.get("/vmrest/users?query=(alias%2520is%2520{})".format(user.strip()), headers=headers) 
      data = res.text 

하는 것으로, 방금 모듈 메서드를 호출합니다. JSON 구문 분석과 같은 몇 가지 추가 기능이 있습니다.

data = res.json() 
+0

지금 고맙습니다. 이제 다음 과제로 넘어갈 수 있습니다. 당신은 확실히 기본 HTTP 모듈보다 훨씬 우월한 요청입니다. 왜 시스코가이를 참조로 사용하는지 잘 모르겠습니다. – rsaturns

+0

@rsaturns'requests'는 파이썬 커뮤니티에서 많은 호응을 얻었지만 아직 그것에 대해 모르는 사람들이 많이 있습니다. 시스코는 문서가 존재하기도 전에 작성했을 수도 있고 제 3 자 라이브러리를 공식 문서에 설치할 것을 사람들에게 말하는 것이 불편할 수도 있습니다. 가능한 많은 이유. 다행스럽게도 도움이 될 수 있습니다. – jpmc26

관련 문제