【发布时间】:2018-07-04 05:44:36
【问题描述】:
我正在尝试上传一个 CSV 文件,对其进行处理以产生结果,然后写回(下载)一个包含结果的新 CSV 文件。
我对 Flask 很陌生,我无法获得一个“正确的”csv.reader 对象来迭代和处理。
这是到目前为止的代码,
__author__ = 'shivendra'
from flask import Flask, make_response, request
import csv
app = Flask(__name__)
def transform(text_file_contents):
return text_file_contents.replace("=", ",")
@app.route('/')
def form():
return """
<html>
<body>
<h1>Transform a file demo</h1>
<form action="/transform" method="post" enctype="multipart/form-data">
<input type="file" name="data_file" />
<input type="submit" />
</form>
</body>
</html>
"""
@app.route('/transform', methods=["POST"])
def transform_view():
file = request.files['data_file']
if not file:
return "No file"
file_contents = file.stream.read().decode("utf-8")
csv_input = csv.reader(file_contents)
print(file_contents)
print(type(file_contents))
print(csv_input)
for row in csv_input:
print(row)
result = transform(file_contents)
response = make_response(result)
response.headers["Content-Disposition"] = "attachment; filename=result.csv"
return response
if __name__ == "__main__":
app.run(host='0.0.0.0', port=5001, debug=True)
终端输出是
127.0.0.1 - - [12/Oct/2015 02:51:53] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [12/Oct/2015 02:51:59] "POST /transform HTTP/1.1" 200 -
4,5,6
<class 'str'>
<_csv.reader object at 0x105149438>
['1']
['', '']
['2']
['', '']
['3']
[]
['4']
['', '']
['5']
['', '']
['6']
而我读到的文件是
当我迭代 csv.reader 对象时没有得到代表 2 行的 2 个列表,我做错了什么?
【问题讨论】:
-
您能否以文本格式而不是电子表格程序显示您的 csv 文件的外观。另外,您使用什么电子表格程序来生成 csv(如果有)。还有一件事,为什么必须用
,替换=?大多数 csv 方言不使用等号。 -
@iLoveTux 用
,替换=是完全没有必要的。变换现在是一个虚拟函数。但我一直无法到达那里,因为我被困在 csv 阅读部分。 -
添加了csv的文本文件图片。
-
这个站点上的 cmets 的格式很奇怪。那是3到4之间的换行符吗?通过遍历您的 csv 的结果,似乎每个数字后面都有一个回车符
\r或换行符\n,但如果不是这样,我需要一个 csv 文件的实际副本来播放为了弄清楚 -
是的,这很奇怪。我将文件上传到dropbox.com/s/xmgn8n3o9leor12/blog1.csv?dl=0