Add pyupgrade
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