在其他语言中,我会使用这样的结构:
a..z
Run Code Online (Sandbox Code Playgroud)
我无法想出比这更好的解决方案:
[chr(x) for x in range(ord("a"), ord("z") + 1)]
Run Code Online (Sandbox Code Playgroud)
是否有更短,更易读的方式来构建这样的列表?
我有一个Python 2.6脚本,它使用拉丁文1编码的特殊字符,我从SQL Server数据库中检索.我想打印这些字符,但我有点受限,因为我使用的是一个调用unicode工厂的库,我不知道如何让Python使用除了以外的编解码器ascii.
该脚本是一个简单的工具,可以从数据库返回查找数据,而无需直接在SQL编辑器中执行SQL.我使用PrettyTable 0.5库来显示结果.
脚本的核心是这段代码.我从游标中获得的元组包含整数和字符串数据,并且没有Unicode数据.(我会使用adodbapi而不是pyodbc,这会让我获得Unicode,但adodbapi给了我其他问题.)
x = pyodbc.connect(cxnstring)
r = x.cursor()
r.execute(sql)
t = PrettyTable(columns)
for rec in r:
t.add_row(rec)
r.close()
x.close()
t.set_field_align("ID", 'r')
t.set_field_align("Name", 'l')
print t
Run Code Online (Sandbox Code Playgroud)
但该Name列可以包含超出ASCII范围的字符.prettytable.pyc当它进入t.add_row调用时,我有时会在第222行收到类似这样的错误消息:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 12: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
这是第222行prettytable.py.它使用unicode,这是我的问题的根源,而不仅仅是在这个脚本中,而是在我编写的其他Python脚本中.
for i in range(0,len(row)):
if len(unicode(row[i])) > self.widths[i]: # This is line 222
self.widths[i] …Run Code Online (Sandbox Code Playgroud) 我想计算两个日期之间的周差,如果两个日期的前一个星期日相同,则两个日期被视为同一周的一部分。理想情况下,我想使用DATEDIFF,而不是学习精心设计的习语来计算值。但是当涉及数周时,我不知道它是如何工作的。
以下查询返回 1 和 2。如果您的日历周以星期日开始,即如果您SET DATEFIRST 7预先运行或@@DATEFIRST默认情况下为 7,这可能是有意义的。
SET DATEFIRST 7;
-- SET DATEFIRST 1;
DECLARE
@d1 DATETIME,
@d2a DATETIME,
@d2b DATETIME
;
SELECT
@d1 = '2010-04-05', -- Monday
@d2a = '2010-04-16', -- Following Friday
@d2b = '2010-04-18' -- the Sunday following
;
SELECT
DATEDIFF(week, @d1, @d2a) AS weekdiff_a -- returns 1
,DATEDIFF(week, @d1, @d2b) AS weekdiff_b -- returns 2
;
Run Code Online (Sandbox Code Playgroud)
因此,如果SET DATEFIRST 1执行而不是SET DATEFIRST 7. 但不管怎样,返回值都是一样的!
这里发生了什么?我应该怎么做才能获得正确的周差?
如何找到重复的行?如果last_name是重复字段,我想要显示
last_name frst_name frst_name1 frst_name2 ....
Run Code Online (Sandbox Code Playgroud)
任何数据库都会这样做,更喜欢oracle.