这是我的代码:
import csv
import requests
with requests.Session() as s:
s.post(url, data=payload)
download = s.get('url that directly download a csv report')
Run Code Online (Sandbox Code Playgroud)
这使我可以访问csv文件.我尝试了不同的方法来处理下载:
这将在一个字符串中提供csv文件:
print download.content
Run Code Online (Sandbox Code Playgroud)
这将打印第一行并返回错误:_csv.Error:在未加引号的字段中看到的换行符
cr = csv.reader(download, dialect=csv.excel_tab)
for row in cr:
print row
Run Code Online (Sandbox Code Playgroud)
这将在每一行中打印一个字母,它不会打印整个内容:
cr = csv.reader(download.content, dialect=csv.excel_tab)
for row in cr:
print row
Run Code Online (Sandbox Code Playgroud)
我的问题是在这种情况下读取csv文件的最有效方法是什么.以及如何下载实际的csv文件.
谢谢
我试图在queryset中的两个注释结果之间进行划分.印象比点击大得多,所以我应该得到十分之一小数.
def get_queryset(self):
return googleData.objects.filter(account=self.account_name).\
values('date').\
annotate(Sum('click'), Sum('impression'), Sum('converted_click'),
Sum('conversion_value'), Sum('cost'), Sum('conversion_value'), ctr_monthly= Sum('click')/Sum('impression')).\
order_by('-date')
Run Code Online (Sandbox Code Playgroud)
麻烦在这里:
ctr_monthly= Sum('click')/Sum('impression'))
Run Code Online (Sandbox Code Playgroud)
在模板中我有:
<td>{{ googleData.ctr_monthly | floatformat:2}} </td>
Run Code Online (Sandbox Code Playgroud)
结果是0.00.如果我执行ctr_final = click*impression,它会正确生成.Click&Impression都是整数字段.
我试过使用float(),给了我一个语法错误.
另一个问题是:制作像这样的查询集的最佳实践是什么?有什么方法可以将它分解为几段简短的代码并使其更整洁可读?
谢谢〜
在视图中:
def article_add(request):
print request.user, " is adding an article"
if request.method == "POST":
web_url = request.POST['web_url']
Uploadarticle(web_url)
return redirect('myapp:index')
Run Code Online (Sandbox Code Playgroud)
在html中:
<form class="navbar-form navbar-right" role="form" method="post" action="{% url 'myapp:article_add' %}" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-group">
<div class="col-sm-10">
<input id="article_url" name="web_url" type="text">
</div>
</div>
<button type="submit" class="btn btn-default"> + </button>
</form>
Run Code Online (Sandbox Code Playgroud)
在url.py中:
app_name = 'myapp'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^$', views.article_add, name='article_add'),
]
Run Code Online (Sandbox Code Playgroud)
我在这里尝试做的是通过html传递url值来查看,调用函数上传数据库,将用户重定向到刷新的同一主页,然后新添加的项目将显示.
不知怎的,每次我提交我都有一个空白页面,在终端我得到一个错误说:
Method Not Allowed (POST): /
"POST / HTTP/1.1" 405 0
Run Code Online (Sandbox Code Playgroud) 我有两张桌子。A 带有物料,(库存主清单) B 带有物料、日期和销售额(销售表)
我有:
cursor.execute(
"SELECT A.item, sum(B.qty) \
FROM A \
LEFT JOIN sales on A.item = B.item \
WHERE B.date BETWEEN %s AND %s\
GROUP BY A.item", (gr2014start, gr2014end))
Run Code Online (Sandbox Code Playgroud)
这并没有列出 A 中的所有项目我知道在选定的日期范围内,A 中的某些项目在 B 上没有任何销售,因此它不存在。有没有办法可以使用 join 函数将它们列为零?
我有这个:
cursor.execute("SELECT A.item, \
(SELECT COALESCE(sum(qty),0) From B \
WHERE (A.item = B.item) \
AND (B.date BETWEEN %s AND %s)) as 'Qty' \
FROM A", (gr2014start, gr2014end))
Run Code Online (Sandbox Code Playgroud)
这有效。但不知何故,这个非常慢(比顶部的不完整连接函数慢 3 或 4 倍)
谢谢你。