我在程序中遇到错误,该程序应该运行很长时间才能打开太多文件.有什么方法可以跟踪哪些文件是打开的,所以我可以偶尔打印出这个列表,看看问题出在哪里?
我正在编写的Python程序是从文件顶部读取一定数量的行,程序需要保留此标题以备将来使用.目前,我正在做类似以下的事情:
header = ''
header_len = 4
for i in range(1, header_len):
header += file_handle.readline()
Run Code Online (Sandbox Code Playgroud)
Pylint抱怨说我没有使用变量i.什么是更pythonic方式来做到这一点?
编辑:程序的目的是智能地将原始文件拆分为较小的文件,每个文件包含原始标题和数据的子集.因此,在读取文件的其余部分之前,我需要读取并保留标题.
我试图将二进制数据插入imageSQL Server数据库中的数据类型列.我知道varbinary(max)是首选的数据类型,但我无权更改架构.
无论如何,我正在读取文件的内容并将其包装在pyodbc.Binary()中,如下所示:
f = open('Test.ics', 'rb')
ablob = f.read().encode('hex')
ablob = pyodbc.Binary(ablob)
Run Code Online (Sandbox Code Playgroud)
当我print repr(ablob)看到正确的值bytearray(b'424547494e3a5 . . .(省略号添加).
但是,插入后
insertSQL = """insert into documents(name, documentType, document, customerNumber) values(?,?,?,?)"""
cur.execute(insertSQL, 'test200.ics', 'text/calendar', pyodbc.Binary(ablob), 1717)
Run Code Online (Sandbox Code Playgroud)
文档列的值0x343234353 . . .看起来好像十六进制数据已转换为ASCII字符代码.
我想在pyodbc.Binary()中包装值会解决这个问题吗?任何帮助将不胜感激.
我使用的是Python 2.7和SQL Server 2008 R2(10.50).
编辑:
熊女士善意地指出,我不必要地调用编码('hex'),这导致了我的问题.我相信这一定是将数据强制转换为字符串(尽管更全面的解释会有所帮助).
工作代码:
ablob = pyodbc.Binary(f.read())
cur.execute(insertSQL, 'test200.ics', 'text/calendar', ablob, 1717)
Run Code Online (Sandbox Code Playgroud)