Модуль Python, возвращающий ошибки в bash, но не из IDLE - PullRequest
1 голос
/ 26 февраля 2012

Я начинающий программист, пишу здесь впервые.Любые предложения и советы приветствуются!Я работаю над проектом, который сравнивает содержимое, скажем test.csv с ref.csv (оба столбца содержат строки из 3-4 слов), и присваивает оценку каждой строке из test.csv, основываясь на ее сходстве с наиболее похожимистрока в ref.csv.Я использую модуль сопоставления строк fuzzywuzzy для назначения оценки сходства.

Следующий фрагмент кода берет два входных файла, преобразует их в массивы и распечатывает массивы:

import csv

# Load text matching module
from fuzzywuzzy import fuzz
from fuzzywuzzy import process


# Import reference and test lists and assign to variables
ref_doc = csv.reader(open('ref.csv', 'rb'), delimiter=",", quotechar='|')
test_doc = csv.reader(open('test.csv', 'rb'), delimiter=",", quotechar='|')

# Define the arrays into which to load these lists
ref = []
test = []

# Assign the reference and test docs to arrays
for row in ref_doc:
    ref.append(row)

for row in test_doc:
    test.append(row)

# Print the arrays to make sure this all worked properly
# before we procede to run matching operations on the arrays
print ref, "\n\n\n", test

Проблема в том, что этот скрипт работает, как и ожидалось, когда я запускаю его в IDLE, но возвращает следующую ошибку, когда я вызываю его из bash:

['one', 'two']
Traceback (most recent call last):
  File "csvimport_orig.py", line 4, in <module>
    from fuzzywuzzy import fuzz
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/fuzzywuzzy/fuzz.py", line 32, in <module>
    import utils
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/fuzzywuzzy/utils.py", line 6, in <module>
    table_from=string.punctuation+string.ascii_uppercase
AttributeError: 'module' object has no attribute 'punctuation'

Есть ли что-то, что мне нужно настроитьв bash для этого нужно правильно работать?Или есть что-то принципиально неправильное, что IDLE не ловит?Для простоты я не называю модуль fuzzywuzzy в этом фрагменте, но он работает как ожидалось в IDLE.

В конце концов, я хотел бы использовать pylevenshtein , но пытаюсь увидетьесли мое использование этого сценария имеет значение, прежде чем я добавлю дополнительное время на выполнение этой работы.

Заранее спасибо.

1 Ответ

1 голос
/ 26 февраля 2012

Почти наверняка у вас есть модуль с именем string.py, который загружается вместо string.py модуля stdlib.

Вы можете подтвердить это, добавив строки

import string
print string

в вашу csvimport_orig.py программу. Это должно показать что-то вроде

<module 'string' from '/usr/lib/python2.7/string.pyc'>

[Я сейчас нахожусь на linux, поэтому местоположение другое, и вы должны увидеть обычный /Library/Frameworks/etc. эквивалент.] Вместо этого он, вероятно, покажет:

<module 'string' from 'string.py'>

или вместо string.py везде, где находится конфликтующая библиотека. Переименуйте ваш string.py модуль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...