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字符。