gpt4 book ai didi

Python字符串操作——性能问题

转载 作者:太空狗 更新时间:2023-10-29 22:27:44 26 4
gpt4 key购买 nike

我有以下一段代码,我在我的应用程序中执行了大约 200 万次来解析这么多记录。这部分似乎是瓶颈,我想知道是否有人可以通过建议一些可以使这些简单的字符串操作更快的漂亮技巧来帮助我。

try:
data = []
start = 0
end = 0
for info in self.Columns():
end = start + (info.columnLength)
slice = line[start:end]
if slice == '' or len(slice) != info.columnLength:
raise 'Wrong Input'
if info.hasSignage:
if(slice[0:1].strip() != '+' and slice[0:1].strip() != '-'):
raise 'Wrong Input'
if not info.skipColumn:
data.append(slice)
start = end
parsedLine = data
except:
parsedLine = False

最佳答案

def fubarise(data):
try:
if nasty(data):
raise ValueError("Look, Ma, I'm doing a big fat GOTO ...") # sheesh #1
more_of_the_same()
parsed_line = data
except ValueError:
parsed_line = False
# so it can be a "data" or False -- sheesh #2
return parsed_line

raise 语句中有不同的错误消息是没有意义的;他们从未见过。嘘 #3。

更新:这是一个建议的改进,它使用 struct.unpack 快速分割输入行。它还说明了更好的异常处理,前提是代码的编写者也在运行它并且在出现第一个错误时停止是可以接受的。为用户受众记录所有行的所有列中的所有错误的稳健实现是另一回事。请注意,通常对每一列的错误检查会更加广泛,例如检查前导符号而不检查列是否包含有效数字似乎有点奇怪。

import struct

def unpacked_records(self):
cols = self.Columns()
unpack_fmt = ""
sign_checks = []
start = 0
for colx, info in enumerate(cols, 1):
clen = info.columnLength
if clen < 1:
raise ValueError("Column %d: Bad columnLength %r" % (colx, clen))
if info.skipColumn:
unpack_fmt += str(clen) + "x"
else:
unpack_fmt += str(clen) + "s"
if info.hasSignage:
sign_checks.append(start)
start += clen
expected_len = start
unpack = struct.Struct(unpack_fmt).unpack

for linex, line in enumerate(self.whatever_the_list_of_lines_is, 1):
if len(line) != expected_len:
raise ValueError(
"Line %d: Actual length %d, expected %d"
% (linex, len(line), expected_len))
if not all(line[i] in '+-' for i in sign_checks):
raise ValueError("Line %d: At least one column fails sign check" % linex)
yield unpack(line) # a tuple

关于Python字符串操作——性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7287654/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com