我有一个函数,从字符串列表中删除标点符号:
def strip_punctuation(input):
x = 0
for word in input:
input[x] = re.sub(r'[^A-Za-z0-9 ]', "", input[x])
x += 1
return input
Run Code Online (Sandbox Code Playgroud)
我最近修改了我的脚本以使用Unicode字符串,所以我可以处理其他非西方字符.当遇到这些特殊字符并且只返回空的Unicode字符串时,此函数会中断.如何从Unicode格式的字符串中可靠地删除标点符号?
这似乎应该是一个简单的解决方案,但到目前为止,我找不到解决方案.我有一个单列csv文件,其中非ascii字符保存在utf-8中,我想读入并存储在列表中.我试图遵循"Unicode三明治"的原则,并在读取文件时解码:
import codecs
import csv
with codecs.open('utf8file.csv', 'rU', encoding='utf-8') as file:
input_file = csv.reader(file, delimiter=",", quotechar='|')
list = []
for row in input_file:
list.extend(row)
Run Code Online (Sandbox Code Playgroud)
这会产生恐惧'编解码器无法对位置编码,顺序不在范围(128)'错误.
我也尝试过这个答案的解决方案,它会返回一个类似的错误
def unicode_csv_reader(utf8_data, dialect=csv.excel, **kwargs):
csv_reader = csv.reader(utf8_data, dialect=dialect, **kwargs)
for row in csv_reader:
yield [unicode(cell, 'utf-8') for cell in row]
filename = 'inputs\encode.csv'
reader = unicode_csv_reader(open(filename))
target_list = []
for field1 in reader:
target_list.extend(field1)
Run Code Online (Sandbox Code Playgroud)
从文档改编的非常类似的解决方案返回相同的错误.
def unicode_csv_reader(utf8_data, dialect=csv.excel):
csv_reader = csv.reader(utf_8_encoder(utf8_data), dialect)
for row in csv_reader:
yield [unicode(cell, …Run Code Online (Sandbox Code Playgroud) 在玩外部API时遇到了这个问题.我将我的身体数据作为字典直接发送到请求中,并且收到了400个错误:
data = {
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
}
Run Code Online (Sandbox Code Playgroud)
当我添加一个json.dumps包装时,它可以工作:
data = json.dumps({
"someParamRange": {
"to": 1000,
"from": 100
},
"anotherParamRange": {
"to": True,
"from": False
}
})
Run Code Online (Sandbox Code Playgroud)
我不完全理解为什么这是必要的,因为字典和JSON对象在语法上是相同的.有人可以帮我理解幕后发生的事情吗?
为了完整性,这是我的标题:
headers = {'API-KEY': 'blerg', 'Accept-Encoding': 'UTF-8', 'Content-Type': 'application/json', 'Accept': '*/*', 'username': 'user', 'password': 'pwd'}
Run Code Online (Sandbox Code Playgroud)
编辑:
我之前没有提到这个,但现在我觉得它可能是相关的.我正在使用Python Requests库,另一篇文章似乎建议你永远不必将参数编码到请求对象:https://stackoverflow.com/a/14804320/1012040
"无论GET/POST是否你再也不需要编码参数,它只需要一个字典作为参数,并且很好."
好像序列化似乎不是必要的?
我的请求对象:
response = requests.post(url, data=data, headers=headers)
Run Code Online (Sandbox Code Playgroud) 我试图从存储在表中的数据创建HTML表.我的数据从表中读取并转换为列表的字典,例如:
x = {'date':[u'2012-06-28', u'2012-06-29', u'2012-06-30'], 'users': [405, 368, 119]}
Run Code Online (Sandbox Code Playgroud)
我的目标是为任意列表长度创建一个具有以下结构的HTML表:
<table>
<thead>
<th>Date</th>
<th>Users</th>
</thead>
<tbody>
<tr>
<td>2012-06-28</td>
<td>405</td>
</tr>
<tr>
<td>2012-06-29</td>
<td>368</td>
</tr>
<tr>
<td>2012-06-30</td>
<td>119</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我在Flask模板中尝试过两种不正确的方法:
<tbody>
{% for line in x %}
<tr>
<td>{{ x.date|tojson|safe }}</td>
<td>{{ x.users }}</td>
</tr>
{% endfor %}
</tbody>
Run Code Online (Sandbox Code Playgroud)
这会将整个列表打印到每列中.
和:
{% for date in x.date %}
<tr><td>{{ date|tojson|safe }}</td></tr>
{% endfor %}
{% for users in x.users %}
<tr><td>{{ users }}</td></tr>
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
这只是将所有内容打印到第一列.
这些实验和许多其他死角让我相信,根据我目前的数据结构,没有简单的方法来构建表格.
鉴于此,我有两个问题: …
我正在尝试将现有的sqlite3数据库挂钩到我正在构建的仪表板上,我遇到了一个我无法弄清楚如何解决的问题.我一直在努力将Flask文档和其他来源的内容拼凑起来,所以请随时给我打电话,看看有点奇怪的事情.它可能是,我只是不知道:)
码:
from __future__ import with_statement
from contextlib import closing
from flask import Flask, render_template, request, session, g, redirect, url_for, abort, flash
import sqlite3
#config
DATABASE = '~/home/aaron/Dropbox/coding/webapp2/tmp/test.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'
app = Flask(__name__)
app.config.from_object(__name__)
def connect_db():
return sqlite3.connect(app.config['DATABASE']) # LINE 17
@app.before_request
def before_request():
g.db = connect_db() # LINE 22
@app.teardown_request
def teardown_request(exception):
if hasattr(g, 'db'):
g.db.close()
# App seems to error out before app.route and if __name__=='__main__' block …Run Code Online (Sandbox Code Playgroud) 初学者问题.这似乎应该是一个简单的操作,但我无法从阅读文档中弄清楚.
我有一个这种结构的df:
|integer_id|int_field_1|int_field_2|
Run Code Online (Sandbox Code Playgroud)
integer_id列是非唯一的,所以我想将df按integer_id分组并将两个字段相加.
等效的SQL是:
SELECT integer_id, SUM(int_field_1), SUM(int_field_2) FROM tbl
GROUP BY integer_id
Run Code Online (Sandbox Code Playgroud)
有关最简单方法的任何建议吗?
编辑:包括输入/输出
Input:
integer_id int_field_1 int_field_2
2656 36 36
2656 36 36
9702 2 2
9702 1 1
Run Code Online (Sandbox Code Playgroud)
输出使用df.groupby('integer_id').sum():
integer_id int_field_1 int_field_2
2656 72 72
9702 3 3
Run Code Online (Sandbox Code Playgroud) 我很难处理似乎是一个简单的问题.我正在尝试导入一个csv并将其列拆分为可以在其上运行不同操作的数组,然后将zip()重新组合在一起.
import csv
data = csv.reader(open('test.csv', 'rb'), delimiter=",", quotechar='|')
column1, column2 = [], []
for row in data:
column1.extend(row[0])
column2.extend(row[1])
print column1
print column2
Run Code Online (Sandbox Code Playgroud)
此代码打印两个数组,其中的元素是单个字符而不是字符串.当我尝试使用单个列执行此操作时,column1.extend(row)执行我想要的操作.
我对解决这个特定问题的方法感兴趣,或者将其概括为n列.
试图从需要登录的URL解析json.包括我在这里的所有代码,因为我不确定错误在哪里.
try: import simplejson as json
except ImportError: import json
import urllib2
username = 'user'
password = '1234'
url = "https://www.blah.com/someplace"
# set up the username/password/url request
password_mgr = urllib2.HTTPPasswordMgrWithDefaultRealm()
password_mgr.add_password(None, "https://www.blah.com", username, password)
handler = urllib2.HTTPBasicAuthHandler(password_mgr)
opener = urllib2.build_opener(handler)
urllib2.install_opener(opener)
request = urllib2.Request(url)
response = opener.open(request)
# option 1
json_object = json.loads(str(response))
#option 2
json_object = json.loads(response)
Run Code Online (Sandbox Code Playgroud)
如果我使用选项1运行代码(注释掉选项2),我会收到此错误:
Traceback (most recent call last):
File "jsontest.py", line 22, in <module>
json_object = json.loads(str(request))
File "/usr/lib/python2.7/dist-packages/simplejson/__init__.py", line 413, in loads
return …Run Code Online (Sandbox Code Playgroud) 这似乎是一个非常基本的问题,但我无法弄清楚。我将 URL 列表传递到 HTML 页面并尝试在 href 标记中打印出每个 URL。我正在使用 Flask 运行测试服务器,并且可以确认变量被正确传入(我可以从中打印出整个列表或元素)。
我的应用路线:
import doaudit # separate Py script that gets these urls
@app.route('/audit', methods = ['GET'])
def audit():
return render_template('audit.html', listOfUrls = doaudit.listOfUrls)
Run Code Online (Sandbox Code Playgroud)
我的模板:
<html>
<head>
<title>Data Audit</title>
</head>
<body>
{% for url in listOfUrls %}
<script language="JavaScript">
document.write( "<a href=\"" + url + "\">linktext</a>" );
</script>
{% endfor %}
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方面的变化:
document.write( "<a href=\"" + '{{ listOfUrls[i] }}' + "\">linktext</a>" );
Run Code Online (Sandbox Code Playgroud)
并迭代所有 i 但这也不起作用。
列表的长度可能会有所不同,因此我需要一个迭代解决方案。提前致谢。
我的项目有一堆csv文件,可能会也可能不会根据用户输入调用.我想将这些文件存储在一个子目录中,以保持我的项目文件夹整洁.我对如何做到完全感到困惑.我挖出的大部分资源都涉及从子目录而不是基本数据文件导入模块或包.
导入我的csv的代码行目前看起来像:
target_doc = csv.reader(open('sample.csv', 'rU'), delimiter=",", quotechar='|')
Run Code Online (Sandbox Code Playgroud)
我假设一个解决方案将涉及设置路径变量,使用import os和import sys,并且可能将此行拆分为多个部分?
简单的问题,可能有一个非常简单的答案.我正在从Python脚本中将格式为"2012-06-10"的日期字符串写入TEXT列.
例如
cur.execute("CREATE TABLE tbl(date TEXT, ...)")
cur.execute('INSERT INTO tbl VALUES(%s)' % (str(date[i])), ...)
该脚本实际上是在评估日期字符串,因此"2012-06-10"会以"1996"的形式写入表中.从阅读文档,我猜这与类型亲和力有关,但我无法想象如何覆盖甚至为什么要对字符串进行求值.