我有以下内容:
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"""
)
Run Code Online (Sandbox Code Playgroud)
在查询时,数据resumeData已存储在bytearray类似的内容中:bytearray(b'\xef\xbb\xbf<html><body><h1><b>Ray Bao</b></h1><h2>')
我想要一个for循环遍历上面的光标并resumeData使用给定的列将列写入本地存储fileName.
for row in cursor:
#
# Write to file...
#
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
您可以将数据写入以二进制模式打开的文件:
with open('filename', 'wb') as f:
for row in cursor:
f.write(row[2])
f.write(b'\n')
Run Code Online (Sandbox Code Playgroud)
但请注意,您的样本resumeData列包含UTF-8 BOM ; 你可能想先删除它:
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])
Run Code Online (Sandbox Code Playgroud)
防止使用重复的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')
Run Code Online (Sandbox Code Playgroud)
哪里utf-8-sig是需要UTF-8 BOM的编解码器(但如果丢失则不会抱怨).
如果要每行写一个文件,请打开新文件对象:
for row in cursor:
with open(row[1], 'wb') as f:
f.write(row[2])
Run Code Online (Sandbox Code Playgroud)
再次作为二进制文件,因此您不必担心列使用的编解码器.
| 归档时间: |
|
| 查看次数: |
3300 次 |
| 最近记录: |