diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index a3bb7a4..ccfdc4b 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -22,3 +22,7 @@
     hooks:
     -   id: reorder-python-imports
         language_version: python2.7
+-   repo: https://github.com/asottile/pyupgrade
+    sha: v1.0.0
+    hooks:
+    -   id: pyupgrade
diff --git a/pre_commit_hooks/autopep8_wrapper.py b/pre_commit_hooks/autopep8_wrapper.py
index f6f55fb..52aaebe 100644
--- a/pre_commit_hooks/autopep8_wrapper.py
+++ b/pre_commit_hooks/autopep8_wrapper.py
@@ -17,7 +17,7 @@
         original_contents = io.open(filename).read()
         new_contents = autopep8.fix_code(original_contents, args)
         if original_contents != new_contents:
-            print('Fixing {0}'.format(filename))
+            print('Fixing {}'.format(filename))
             retv = 1
             with io.open(filename, 'w') as output_file:
                 output_file.write(new_contents)
diff --git a/pre_commit_hooks/check_added_large_files.py b/pre_commit_hooks/check_added_large_files.py
index 5ef7f22..8d5f4c4 100644
--- a/pre_commit_hooks/check_added_large_files.py
+++ b/pre_commit_hooks/check_added_large_files.py
@@ -26,10 +26,10 @@
         assert mode in ('A', 'R')
         return filepart if mode == 'A' else filepart.split(' -> ')[1]
 
-    return set(
+    return {
         to_file_part(mode, filepart) for mode, filepart in modes_and_fileparts
         if mode in ('A', 'R')
-    )
+    }
 
 
 def find_large_added_files(filenames, maxkb):
@@ -41,7 +41,7 @@
     for filename in filenames:
         kb = int(math.ceil(os.stat(filename).st_size / 1024))
         if kb > maxkb:
-            print('{0} ({1} KB) exceeds {2} KB.'.format(filename, kb, maxkb))
+            print('{} ({} KB) exceeds {} KB.'.format(filename, kb, maxkb))
             retv = 1
 
     return retv
diff --git a/pre_commit_hooks/check_ast.py b/pre_commit_hooks/check_ast.py
index c993e6a..169e077 100644
--- a/pre_commit_hooks/check_ast.py
+++ b/pre_commit_hooks/check_ast.py
@@ -22,10 +22,10 @@
         try:
             ast.parse(open(filename, 'rb').read(), filename=filename)
         except SyntaxError:
-            print('{0}: failed parsing with {1}:'.format(
+            print('{}: failed parsing with {}:'.format(
                 filename, interpreter,
             ))
-            print('\n{0}'.format(
+            print('\n{}'.format(
                 '    ' + traceback.format_exc().replace('\n', '\n    ')
             ))
             retval = 1
diff --git a/pre_commit_hooks/check_byte_order_marker.py b/pre_commit_hooks/check_byte_order_marker.py
index 274f949..1541b30 100644
--- a/pre_commit_hooks/check_byte_order_marker.py
+++ b/pre_commit_hooks/check_byte_order_marker.py
@@ -16,7 +16,7 @@
         with open(filename, 'rb') as f:
             if f.read(3) == b'\xef\xbb\xbf':
                 retv = 1
-                print('{0}: Has a byte-order marker'.format(filename))
+                print('{}: Has a byte-order marker'.format(filename))
 
     return retv
 
diff --git a/pre_commit_hooks/check_case_conflict.py b/pre_commit_hooks/check_case_conflict.py
index dd4ad86..3d6cf74 100644
--- a/pre_commit_hooks/check_case_conflict.py
+++ b/pre_commit_hooks/check_case_conflict.py
@@ -9,7 +9,7 @@
 
 
 def lower_set(iterable):
-    return set(x.lower() for x in iterable)
+    return {x.lower() for x in iterable}
 
 
 def find_conflicting_filenames(filenames):
@@ -35,7 +35,7 @@
             if x.lower() in conflicts
         ]
         for filename in sorted(conflicting_files):
-            print('Case-insensitivity conflict found: {0}'.format(filename))
+            print('Case-insensitivity conflict found: {}'.format(filename))
         retv = 1
 
     return retv
diff --git a/pre_commit_hooks/check_docstring_first.py b/pre_commit_hooks/check_docstring_first.py
index da5425d..8e658a1 100644
--- a/pre_commit_hooks/check_docstring_first.py
+++ b/pre_commit_hooks/check_docstring_first.py
@@ -27,16 +27,16 @@
         if tok_type == tokenize.STRING and scol == 0:
             if found_docstring_line is not None:
                 print(
-                    '{0}:{1} Multiple module docstrings '
-                    '(first docstring on line {2}).'.format(
+                    '{}:{} Multiple module docstrings '
+                    '(first docstring on line {}).'.format(
                         filename, sline, found_docstring_line,
                     )
                 )
                 return 1
             elif found_code_line is not None:
                 print(
-                    '{0}:{1} Module docstring appears after code '
-                    '(code seen on line {2}).'.format(
+                    '{}:{} Module docstring appears after code '
+                    '(code seen on line {}).'.format(
                         filename, sline, found_code_line,
                     )
                 )
diff --git a/pre_commit_hooks/check_json.py b/pre_commit_hooks/check_json.py
index 688f719..e1578ff 100644
--- a/pre_commit_hooks/check_json.py
+++ b/pre_commit_hooks/check_json.py
@@ -16,7 +16,7 @@
         try:
             simplejson.load(open(filename))
         except (simplejson.JSONDecodeError, UnicodeDecodeError) as exc:
-            print('{0}: Failed to json decode ({1})'.format(filename, exc))
+            print('{}: Failed to json decode ({})'.format(filename, exc))
             retval = 1
     return retval
 
diff --git a/pre_commit_hooks/check_symlinks.py b/pre_commit_hooks/check_symlinks.py
index 713dd83..fd80089 100644
--- a/pre_commit_hooks/check_symlinks.py
+++ b/pre_commit_hooks/check_symlinks.py
@@ -19,7 +19,7 @@
                 os.path.islink(filename) and
                 not os.path.exists(filename)
         ):  # pragma: no cover (symlink support required)
-            print('{0}: Broken symlink'.format(filename))
+            print('{}: Broken symlink'.format(filename))
             retv = 1
 
     return retv
diff --git a/pre_commit_hooks/check_xml.py b/pre_commit_hooks/check_xml.py
index 926f6e9..a4c11a5 100644
--- a/pre_commit_hooks/check_xml.py
+++ b/pre_commit_hooks/check_xml.py
@@ -19,7 +19,7 @@
             with io.open(filename, 'rb') as xml_file:
                 xml.sax.parse(xml_file, xml.sax.ContentHandler())
         except xml.sax.SAXException as exc:
-            print('{0}: Failed to xml parse ({1})'.format(filename, exc))
+            print('{}: Failed to xml parse ({})'.format(filename, exc))
             retval = 1
     return retval
 
diff --git a/pre_commit_hooks/debug_statement_hook.py b/pre_commit_hooks/debug_statement_hook.py
index 52fe72e..902198f 100644
--- a/pre_commit_hooks/debug_statement_hook.py
+++ b/pre_commit_hooks/debug_statement_hook.py
@@ -7,7 +7,7 @@
 import traceback
 
 
-DEBUG_STATEMENTS = set(['pdb', 'ipdb', 'pudb', 'q', 'rdb'])
+DEBUG_STATEMENTS = {'pdb', 'ipdb', 'pudb', 'q', 'rdb'}
 
 
 DebugStatement = collections.namedtuple(
@@ -37,7 +37,7 @@
     try:
         ast_obj = ast.parse(open(filename).read(), filename=filename)
     except SyntaxError:
-        print('{0} - Could not parse ast'.format(filename))
+        print('{} - Could not parse ast'.format(filename))
         print()
         print('\t' + traceback.format_exc().replace('\n', '\n\t'))
         print()
@@ -47,7 +47,7 @@
     if visitor.debug_import_statements:
         for debug_statement in visitor.debug_import_statements:
             print(
-                '{0}:{1}:{2} - {3} imported'.format(
+                '{}:{}:{} - {} imported'.format(
                     filename,
                     debug_statement.line,
                     debug_statement.col,
diff --git a/pre_commit_hooks/detect_private_key.py b/pre_commit_hooks/detect_private_key.py
index d187364..feb2208 100644
--- a/pre_commit_hooks/detect_private_key.py
+++ b/pre_commit_hooks/detect_private_key.py
@@ -26,7 +26,7 @@
 
     if private_key_files:
         for private_key_file in private_key_files:
-            print('Private key found: {0}'.format(private_key_file))
+            print('Private key found: {}'.format(private_key_file))
         return 1
     else:
         return 0
diff --git a/pre_commit_hooks/end_of_file_fixer.py b/pre_commit_hooks/end_of_file_fixer.py
index 3349d83..4fe82b7 100644
--- a/pre_commit_hooks/end_of_file_fixer.py
+++ b/pre_commit_hooks/end_of_file_fixer.py
@@ -58,7 +58,7 @@
         with open(filename, 'rb+') as file_obj:
             ret_for_file = fix_file(file_obj)
             if ret_for_file:
-                print('Fixing {0}'.format(filename))
+                print('Fixing {}'.format(filename))
             retv |= ret_for_file
 
     return retv
diff --git a/pre_commit_hooks/pretty_format_json.py b/pre_commit_hooks/pretty_format_json.py
index 91dae8d..bf1ccb1 100644
--- a/pre_commit_hooks/pretty_format_json.py
+++ b/pre_commit_hooks/pretty_format_json.py
@@ -25,7 +25,7 @@
 
 
 def _autofix(filename, new_contents):
-    print("Fixing file {0}".format(filename))
+    print("Fixing file {}".format(filename))
     with open(filename, 'w') as f:
         f.write(new_contents)
 
@@ -100,7 +100,7 @@
             )
 
             if contents != pretty_contents:
-                print("File {0} is not pretty-formatted".format(json_file))
+                print("File {} is not pretty-formatted".format(json_file))
 
                 if args.autofix:
                     _autofix(json_file, pretty_contents)
@@ -109,7 +109,7 @@
 
         except simplejson.JSONDecodeError:
             print(
-                "Input File {0} is not a valid JSON, consider using check-json"
+                "Input File {} is not a valid JSON, consider using check-json"
                 .format(json_file)
             )
             return 1
diff --git a/pre_commit_hooks/requirements_txt_fixer.py b/pre_commit_hooks/requirements_txt_fixer.py
index 64b5e47..efa1906 100644
--- a/pre_commit_hooks/requirements_txt_fixer.py
+++ b/pre_commit_hooks/requirements_txt_fixer.py
@@ -84,7 +84,7 @@
             ret_for_file = fix_requirements(file_obj)
 
             if ret_for_file:
-                print('Sorting {0}'.format(arg))
+                print('Sorting {}'.format(arg))
 
             retv |= ret_for_file
 
diff --git a/pre_commit_hooks/string_fixer.py b/pre_commit_hooks/string_fixer.py
index 9ef7a37..3523e8a 100644
--- a/pre_commit_hooks/string_fixer.py
+++ b/pre_commit_hooks/string_fixer.py
@@ -69,7 +69,7 @@
     for filename in args.filenames:
         return_value = fix_strings(filename)
         if return_value != 0:
-            print('Fixing strings in {0}'.format(filename))
+            print('Fixing strings in {}'.format(filename))
         retv |= return_value
 
     return retv
diff --git a/pre_commit_hooks/tests_should_end_in_test.py b/pre_commit_hooks/tests_should_end_in_test.py
index 4bfc767..5f4cd08 100644
--- a/pre_commit_hooks/tests_should_end_in_test.py
+++ b/pre_commit_hooks/tests_should_end_in_test.py
@@ -26,7 +26,7 @@
         ):
             retcode = 1
             print(
-                '{0} does not match pattern "{1}"'.format(
+                '{} does not match pattern "{}"'.format(
                     filename, test_name_pattern
                 )
             )
diff --git a/pre_commit_hooks/trailing_whitespace_fixer.py b/pre_commit_hooks/trailing_whitespace_fixer.py
index d23d58d..1ae15a9 100644
--- a/pre_commit_hooks/trailing_whitespace_fixer.py
+++ b/pre_commit_hooks/trailing_whitespace_fixer.py
@@ -67,7 +67,7 @@
     for ext in md_exts:
         if any(c in ext[1:] for c in r'./\:'):
             parser.error(
-                "bad --markdown-linebreak-ext extension '{0}' (has . / \\ :)\n"
+                "bad --markdown-linebreak-ext extension '{}' (has . / \\ :)\n"
                 "  (probably filename; use '--markdown-linebreak-ext=EXT')"
                 .format(ext)
             )
diff --git a/tests/readme_test.py b/tests/readme_test.py
index d479d42..4d4c972 100644
--- a/tests/readme_test.py
+++ b/tests/readme_test.py
@@ -10,4 +10,4 @@
     readme_contents = io.open('README.md').read()
     hooks = yaml.load(io.open('hooks.yaml').read())
     for hook in hooks:
-        assert '`{0}`'.format(hook['id']) in readme_contents
+        assert '`{}`'.format(hook['id']) in readme_contents
