2017-05-16 2 views
0

내 이전 질문, 파이썬에서 csv 파일을 여는 방법에 대해 더 자세히 설명 드리지만 아직 오류가 발생하지 않았습니다. 다음과 같이파이썬에서 csv 파일 열기 : builtins. AttributeError AttributeError : '_io.BytesIO'객체에 'file'속성이 없습니다.

@app.route("/admin", methods=["GET", "POST"]) 
@login_required 
def admin(): 
"""Configure Admin Screen""" 
# if user reached route via POST (as by submitting a form via POST) 
if request.method == "POST": 

    # load csv file with portfolio data 
    csvfile = TextIOWrapper(request.files['portfolios'].file, encoding=request.encoding) 
    portfolios = csv.DictReader(csvfile) 

    # load csv file in dictionary 
    for row in portfolios: 
     print(row['first_name'], row['last_name']) 
else: 
    return render_template("admin.html") 

내 플라스크/HTML 코드는 다음과 같습니다 : 다음과 같이

내 파이썬 코드가

{% extends "layout.html" %} 

`{% block title %} 
    Admin 
{% endblock %} 

{% block main %} 
<h2>Admin Console</h2> 
<h3> Upload Portfolio Data</h2> 
<form action="{{ url_for('admin') }}" method="post" enctype=multipart/form- 
data> 
<fieldset> 
    <label class="control-label">Select Portfolio Upload File</label> 
    <input id="input-1" type="file" class="file" name="portfolios"> 
    <h3>Upload Security Lists</h2> 
    <label class="control-label">Select Security Upload File</label> 
    <input id="input-1" type="file" class="file" name="securities"> 
    <div class="form-group"> 
     <button class="btn btn-default" type="submit" value = "upload">Upload</button> 
    </div> 
</fieldset> 
</form> 
{% endblock %} 

를 처음에, 말 그대로 파이썬 문서의 예를 다음 : CSV 가져 오기를 csvfile로 열기 ('names.csv') : 독자 = csv.DictReader (csvfile) 리더의 행 : 인쇄 (행 [ 'first_name'], 행 [ 'last_nam E '])

또 다른 오류가 발생 유형 오류 (see my earlier post)

난 다음, "열기"제안, 제거를 주면서이 didnt가 작동합니다. 그런 다음 블록으로 전체를 제거했는데 오류가 발생했습니다. 이제 위의 코드는 내가 지금 누구인지, 그리고 그 다음과 같은 오류 발생 :

builtins.AttributeError AttributeError를 '_io.BytesIO'객체 내 CSV를 도울 수있는 속성 '파일'

사람이 없습니다 끝내기 위해 악몽을 가져라 ?? Txs !!

+0

방금'csvfile = TextIOWrapper (request.files [ '포트폴리오', 인코딩 = request.encoding)를 시도' –

답변

0

io.TextIOWrapperio.BytesIO 개체를 괜찮습니다.

당신은 (거의) 당신이 추가하는 것을 제외하고, 그것을 전달하는 .file (왜?)에 io.BytesIO 클래스의 필드

그냥 할 (request.files['portfolios'] 이미 io.BytesIO 객체이다)하지 않은 : 나는 그렇게 할 경우

csvfile = TextIOWrapper(request.files['portfolios'], encoding=request.encoding) 
+0

는 Hmmmmm, 나는 AttributeError를 얻을 : '요청'개체가있다 '인코딩'속성이 없습니다 .... :( –

+0

당신은 이미 그 문제가 있었음을 의미합니다. e 유형의 '요청'을 표시합니다. "인코딩"매개 변수를 생략하십시오. –

+0

예! 지금은 효과가있는 것 같습니다. 많이 txs! –

관련 문제