我最近继承了一个python项目,我有一些行为我很难解释。在
代码有两个部分,可以将文件导入数据库,也可以将数据库转储到输出文件。导入如下所示:
def importStuff(self):
mysqlimport_args = ['mysqlimport', '--host='+self.host, '--user='+self.username, '--password='+self.password, '--fields-terminated-by=|', '--lines-terminated-by=\n', '--replace', '--local', self.database, filename, '-v']
output = check_output(mysqlimport_args)
垃圾堆是这样的:
^{pr2}$好吧,这不是你见过的最漂亮的python(欢迎使用样式注释,我很乐意了解更多),但这似乎是合理的。在
但是,我接到一个消费者的投诉,说我的输出不是UTF-8格式的(顺便说一下,mysql表使用的是utf8编码)。如果程序是这样执行的,我会迷失方向:
importStuff(...)
getStuff(...)
toCsv(...)
那么输出文件似乎不是有效的utf-8。当我把执行分成两个不同的步骤
importStuff(...)
然后在另一个文件里
getStuff(...)
toCsv(...)
突然,我的输出显示为有效的utf-8。除了我周围有工作,我似乎无法解释这种行为。谁能告诉我我做错了什么吗?或者我能提供更多的信息来澄清到底发生了什么?在
谢谢。在
(Python2.7,以防考虑在内)
编辑:需要更多代码。为了保护无辜的人,比如我的公司,我做了一些小的调整,但或多或少是这样的:
def main():
dbutil = DbUtil(config.DB_HOST, config.DB_DATABASE, config.DB_USERNAME, config.DB_PASSWORD)
if(args.import):
logger.info('Option: --import')
try:
dbutil.mysqlimport(AcConfig.DB_FUND_TABLE)
except Exception, e:
logger.warn("Error occured at mysqlimport. Error is %s" % (e.message))
if(args.db2csv):
try:
logger.info('Option: --db2csv')
records = dbutil.getStuff()
fileutil.toCsv(records, csvfile)
except Exception, e:
logger.warn("Error Occured at db2csv. Message:%s" %(e.message))
main()
就这样。它真的很短,这使得它不那么明显。在
我不确定如何准确地表示输出,它看起来像这样:
"F0NR006F8F"
在我看来,它们或多或少都像ASCII字符,所以我不确定它们会造成什么问题。也许我从一个错误的角度来看待这个问题,我目前依赖于我的文本编辑器对文件编码的最佳猜测。我不知道如何最好地检测出是哪个字符导致它停止将我的文件作为utf-8读取。在
有史以来最愚蠢的回答。输入数据不是UTF-8格式。有人通过编写另一个存储过程来解决这个问题,该存储过程将定期调用以将非utf-8字符转换为utf-8。在我把代码分成两个文件并分别运行它们的时间里,作业运行了。我尝试了4-5次,结果却得出了错误的结论。我现在正在更改读取过程以适应非utf-8输入源,这样系统中就不会隐藏奇怪的争用条件。很抱歉把你们带到了这个愚蠢的阶段。在
相关问题 更多 >
编程相关推荐