私は単純なリストでうまく動作するスクリプトを持っています。それは、単語のリストからいくつかの不要な文字を取り除き、それらを互いに一致させ、同様の単語のいくつかのリストを返す(0.6の比率で)。pyodbcでcursor.fetchallを使用してデータベースから行のリストを作成するにはどうすればよいですか?
しかし、今私はそれがAccessデータベースで動作する必要があります。 私はcrsr.fetchall()でforループを作成し、すべての項目をリスト( "words")に入れると、以前と同じように動作すると思いました。残念ながら、それはここに私のコードだではないと私は本当にそれを把握することはできません...
ん:
# -*- coding: utf-8 -*-
import pyodbc
import re
from difflib import SequenceMatcher
[x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')]
# Connection to accdb
conn_str = (
r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
r'DBQ=C:\\Users\\alice\\Desktop\\lexique3.accdb;'
)
cnxn = pyodbc.connect(conn_str)
crsr = cnxn.cursor()
# Put all words into a list
crsr.execute('SELECT unites_lexicales FROM Mot;')
result1 = crsr.fetchall()
words = []
for item in result1 :
words.append[item]
print(words)
この時点で、私はエラーを得た:
TypeError: 'builtin_function_or_method' object is not subscriptable
私が試しました範囲で反復します
crsr.execute('SELECT unites_lexicales FROM Mot;')
result = crsr.fetchall()
words = []
for i in range(0, len(result)) :
words.append(result[i])
print(words)
しかし、私はこのようになります項目のリストを持って、それがすべてで満足していない:を
[['flore', 'fleur', 'fleuriste'], ['remaniement', 'remanier', 'manier', 'maniable'], ['désaimer', 'aimant', 'aimer'], ['désemmêler', 'emmêler', 'mêler']]
:私は単純なリストでそれをテストすることによって、以前得た結果ここ
radicals = []
motifp = "^(re|em|dés)"
motifs = "(iste|ment|er|ant|able)$"
for word in words :
word = re.sub(motifp, '', word)
word = re.sub(motifs, '', word)
radicals.append(word)
print(radicals)
ratio = 0.6
n = len(radicals)
result = []
used_js = []
for i in range(n):
if i in used_js:
continue
matches = [words[i]]
js = (x for x in range(n) if x != i and x not in used_js)
for j in js:
if SequenceMatcher(None, radicals[i], radicals[j]).ratio() >= ratio :
matches.append(words[j])
used_js.append(j)
result.append(matches)
print(result)
されています。ここでは
[('anbaglé',), ('anfoutan',), ('òrdinè',), ('alakous',), ('ayen',), ('anmè',), ('antòtiyé',),...]
は、単純なリストの上に完全に働いたコードの残りの部分ですカーソル部分全体が間違っているはずですが、どういう仕組みか分かりません...助けてくれてありがとう!
最初のコードスニペットでは、words.append [item]を使用しています。 words.append(item)を使うべきです。 appendはメソッドです。 – Kyle
ありがとうございますが、この列の項目をリストに入れることはできますか? –
fetchall()から返された行はタプルのように動作しますが、名前で列にアクセスすることもできます。ループ内で** words.append(アイテム['unites_lexicales'])**または** words.append(アイテム[0])**を試してください。いくつかの良い例があります。[https://github.com/mkleehammer/pyodbc/wiki/Getting-started#selecting-some-data]を参照してください。 – Kyle