【发布时间】:2019-07-26 12:06:08
【问题描述】:
我当前的 python 脚本有问题。
我使用os.walk 扫描预定义目录,返回一个包含找到的所有图像文件的列表。我通过psycopg2 将该列表与postgres 数据库进行比较。
它可以正常工作,直到我到达名称中带有german umlaut 的子目录或文件(äöü),然后它会收到以下错误:
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 146-147: surrogates not allowed
我当前的代码如下:
import psycopg2
import settings
import os
def open_conn():
conn = psycopg2.connect(
user=settings.DB_USER,
password=settings.DB_PW,
host=settings.DB_IP,
port=settings.DB_Port,
database=settings.DB_DB
)
return conn
def filterExtensions(file_, extensions_):
if file_.lower().endswith(extensions_):
return True
return False
def getFiles(path_, topdown_=False):
files_found = []
for root, dirs, files in os.walk(path_, topdown=topdown_):
for name in files:
files_found.append(os.path.join(root, name))
return files_found
for folders_ in settings.FILE_DIR:
files_found = getFiles(os.path.join(os.getcwd(), folders_))
conn = open_conn()
cur = conn.cursor()
for file_ in files_found:
qs = "SELECT * FROM image_meta WHERE sourcefile = '" + file_ + "';"
cur.execute(qs)
conn.commit()
当我到达 cur.execute(qs) 时,我得到了错误。
当我硬编码路径仅用于测试时,它可以完美运行。
qs = "SELECT * FROM image_meta WHERE sourcefile = '/src/filecrawler/filecrawler/images/original/Grüner_Testordner/IMG_0004.CR2';"
我正在运行 python3 和 psycopg2 2.8.3
编辑: 在将我的代码更改为 holdenweb 和 frankegoesdown 指出后,我仍然遇到相同的错误。
File "test.py", line 42, in <module>
cur.execute(qs, (file_,))
UnicodeEncodeError: 'utf-8' codec can't encode characters in position 101-102: surrogates not allowed
我不知道它是否重要,但文件和文件夹是在 mac 上创建的。
【问题讨论】:
标签: python python-3.x psycopg2