写bytearray到文件?

2024-10-01 17:40:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下内容:

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\xbf<html><body><h1><b>Ray Bao</b></h1><h2>')

我想要一个for循环,它迭代上面的游标,并使用给定的fileNameresumeData列写入本地存储。在

^{pr2}$

我该怎么做?在


Tags: importidconnectionfilenameh1selectcursorcandidate
1条回答
网友
1楼 · 发布于 2024-10-01 17:40:46

您可以将数据写入以二进制模式打开的文件:

with open('filename', 'wb') as f:
   for row in cursor:
       f.write(row[2])
       f.write(b'\n')

但是,请注意,您的示例resumeData列包含一个UTF-8 BOM;您可能需要先删除它:

^{pr2}$

防止重复的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-8bom的编解码器(但是如果丢失了就不会抱怨)。在

如果要每行写入一个文件,请打开新的文件对象:

for row in cursor:
    with open(row[1], 'wb') as f:
        f.write(row[2])

同样是二进制的,这样您就不必担心列使用了什么编解码器。在

相关问题 更多 >

    热门问题