Need help with fuzzywuzzy?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

8.1K Stars 837 Forks GNU General Public License v2.0 381 Commits 100 Opened issues


Fuzzy String Matching in Python

Services available


Need anything else?

Contributors list

.. image:: :target:


Fuzzy string matching like a boss. It uses

Levenshtein Distance 
_ to calculate the differences between sequences in a simple-to-use package.


  • Python 2.7 or higher
  • difflib
  • python-Levenshtein 
    _ (optional, provides a 4-10x speedup in String Matching, though may result in
    differing results for certain cases 

For testing ~~~~~~~~~~~ - pycodestyle - hypothesis - pytest


Using PIP via PyPI

.. code:: bash

pip install fuzzywuzzy

or the following to install


.. code:: bash

pip install fuzzywuzzy[speedup]

Using PIP via Github

.. code:: bash

pip install git+git://[email protected]#egg=fuzzywuzzy

Adding to your

file (run
pip install -r requirements.txt

.. code:: bash

git+ssh://[email protected]/seatgeek/[email protected]#egg=fuzzywuzzy

Manually via GIT

.. code:: bash

git clone git:// fuzzywuzzy
cd fuzzywuzzy
python install


.. code:: python

>>> from fuzzywuzzy import fuzz
>>> from fuzzywuzzy import process

Simple Ratio ~~~~~~~~~~~~

.. code:: python

>>> fuzz.ratio("this is a test", "this is a test!")

Partial Ratio ~~~~~~~~~~~~~

.. code:: python

>>> fuzz.partial_ratio("this is a test", "this is a test!")

Token Sort Ratio ~~~~~~~~~~~~~~~~

.. code:: python

>>> fuzz.ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")
>>> fuzz.token_sort_ratio("fuzzy wuzzy was a bear", "wuzzy fuzzy was a bear")

Token Set Ratio ~~~~~~~~~~~~~~~

.. code:: python

>>> fuzz.token_sort_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")
>>> fuzz.token_set_ratio("fuzzy was a bear", "fuzzy fuzzy was a bear")

Process ~~~~~~~

.. code:: python

>>> choices = ["Atlanta Falcons", "New York Jets", "New York Giants", "Dallas Cowboys"]
>>> process.extract("new york jets", choices, limit=2)
    [('New York Jets', 100), ('New York Giants', 78)]
>>> process.extractOne("cowboys", choices)
    ("Dallas Cowboys", 90)

You can also pass additional parameters to

method to make it use a specific scorer. A typical use case is to match file paths:

.. code:: python

>>> process.extractOne("System of a down - Hypnotize - Heroin", songs)
    ('/music/library/good/System of a Down/2005 - Hypnotize/01 - Attack.mp3', 86)
>>> process.extractOne("System of a down - Hypnotize - Heroin", songs, scorer=fuzz.token_sort_ratio)
    ("/music/library/good/System of a Down/2005 - Hypnotize/10 - She's Like Heroin.mp3", 61)

.. |Build Status| image:: :target:

Known Ports

FuzzyWuzzy is being ported to other languages too! Here are a few ports we know about:

  • Java:
    xpresso's fuzzywuzzy implementation 
  • Java:
    fuzzywuzzy (java port) 
  • Rust:
    fuzzywuzzy-rs (Rust port) 
  • JavaScript:
    fuzzball.js (JavaScript port) 
  • C++:
  • C#:
    fuzzysharp (.Net port) 
  • Go:
    go-fuzzywuzz (Go port) 
  • Free Pascal:
    FuzzyWuzzy.pas (Free Pascal port) 
  • Kotlin multiplatform:
  • R:
    fuzzywuzzyR (R port) 

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.