Python 将bytearray写入文件?
我有以下资料:Python 将bytearray写入文件?,python,pyodbc,Python,Pyodbc,我有以下资料: import pyodbc # ODBC connection to database cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=CCSQLRESUME;DATABASE=ResumeStore;UID=ray;PWD=Yar!') cursor = cnxn.cursor() # SELECT resume data cursor.execute( """SELECT rbs.candidate_id,
import pyodbc
# ODBC connection to database
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=CCSQLRESUME;DATABASE=ResumeStore;UID=ray;PWD=Yar!')
cursor = cnxn.cursor()
# SELECT resume data
cursor.execute(
"""SELECT
rbs.candidate_id,
rbs.[fileName],
rbs.resumeData,
rbs.docType
FROM [ResumeStore].[dbo].[ResumeBinaryStorage] as rbs (NOLOCK)
WHERE rbs.candidate_id = 5078707"""
)
查询时,resumeData
的数据已存储在bytearray
中,如下所示:bytearray(b'\xef\xbb\xbbray')
我需要一个for循环,该循环在上面的光标上迭代,并使用给定的文件名将resumeData
列写入本地存储
for row in cursor:
#
# Write to file...
#
如何执行此操作?您可以将数据写入以二进制模式打开的文件:
with open('filename', 'wb') as f:
for row in cursor:
f.write(row[2])
f.write(b'\n')
但是,请注意,示例resumeData
列包含一个;您可能需要先删除该选项:
import codecs
with open('filename', 'wb') as f:
for row in cursor:
resumeData = row[2]
if resumeData.startswith(codecs.BOM_UTF8):
resumeData = resumeData[3:]
f.write(row[2])
防止重复使用BOM字符(UTF-8确实不需要这些字符)污染文件
您的另一个选择是解码数据并以文本模式写入文件:
with open('filename', 'w') as f:
for row in cursor:
f.write(row[2].decode('utf-8-sig')
f.write(b'\n')
其中utf-8-sig
是需要utf-8 BOM的编解码器(但如果缺少则不会抱怨)
如果要每行写入一个文件,请打开新文件对象:
for row in cursor:
with open(row[1], 'wb') as f:
f.write(row[2])
同样是二进制的,这样您就不必担心专栏使用什么编解码器了。好的,谢谢!我如何修改上述内容,将替换为open('filename','wb')作为f:
,以在光标内传递行的文件名
?@RayBao:ah,您想为每行打开一个新文件吗?我会调整的。@RayBao:那样的话就更容易了,因为你真的不必担心换行符和BOM字符。