diff --git a/pre_commit_hooks/requirements_txt_fixer.py b/pre_commit_hooks/requirements_txt_fixer.py
index 4575975..eff7935 100644
--- a/pre_commit_hooks/requirements_txt_fixer.py
+++ b/pre_commit_hooks/requirements_txt_fixer.py
@@ -40,11 +40,16 @@ class Requirement(object):
 
 def fix_requirements(f):  # type: (IO[bytes]) -> int
     requirements = []  # type: List[Requirement]
-    before = tuple(f)
+    before = list(f)
     after = []  # type: List[bytes]
 
     before_string = b''.join(before)
 
+    # adds new line in case one is missing
+    # AND a change to the requirements file is needed regardless:
+    if before and not before[-1].endswith(b'\n'):
+        before[-1] += b'\n'
+
     # If the file is empty (i.e. only whitespace/newlines) exit early
     if before_string.strip() == b'':
         return PASS

diff --git a/tests/requirements_txt_fixer_test.py b/tests/requirements_txt_fixer_test.py
index c7c6e47..2e2eab6 100644
--- a/tests/requirements_txt_fixer_test.py
+++ b/tests/requirements_txt_fixer_test.py
@@ -15,6 +15,9 @@ from pre_commit_hooks.requirements_txt_fixer import Requirement
         (b'foo\n# comment at end\n', PASS, b'foo\n# comment at end\n'),
         (b'foo\nbar\n', FAIL, b'bar\nfoo\n'),
         (b'bar\nfoo\n', PASS, b'bar\nfoo\n'),
+        (b'a\nc\nb\n', FAIL, b'a\nb\nc\n'),
+        (b'a\nc\nb', FAIL, b'a\nb\nc\n'),
+        (b'a\nb\nc', FAIL, b'a\nb\nc\n'),
         (
             b'#comment1\nfoo\n#comment2\nbar\n',
             FAIL,

requirements-txt-fixer corrupts file if no new line at end
a file with
```
a
b
c
```
(no new line)
will get "fixed" to:
```
a
bc

```

I was able to debug and identify the issue, I'll be happy to also PR a fix but I was wondering if there is really a use for it? I've not seen any input without a new line at the end in the tests cases and as a work around I can add `end-of-file-fixer` before it.


tests/requirements_txt_fixer_test.py::test_integration[a\nc\nb-1-a\nb\nc\n] tests/requirements_txt_fixer_test.py::test_integration[a\nb\nc-1-a\nb\nc\n]
tests/requirements_txt_fixer_test.py::test_integration[-0-] tests/requirements_txt_fixer_test.py::test_integration[\n-0-\n] tests/requirements_txt_fixer_test.py::test_integration[# tests/requirements_txt_fixer_test.py::test_integration[foo\n# tests/requirements_txt_fixer_test.py::test_integration[foo\nbar\n-1-bar\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[bar\nfoo\n-0-bar\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[a\nc\nb\n-1-a\nb\nc\n] tests/requirements_txt_fixer_test.py::test_integration[#comment1\nfoo\n#comment2\nbar\n-1-#comment2\nbar\n#comment1\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[#comment1\nbar\n#comment2\nfoo\n-0-#comment1\nbar\n#comment2\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[#comment\n\nfoo\nbar\n-1-#comment\n\nbar\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[#comment\n\nbar\nfoo\n-0-#comment\n\nbar\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[\nfoo\nbar\n-1-bar\n\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[\nbar\nfoo\n-0-\nbar\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[pyramid==1\npyramid-foo==2\n-0-pyramid==1\npyramid-foo==2\n] tests/requirements_txt_fixer_test.py::test_integration[ocflib\nDjango\nPyMySQL\n-1-Django\nocflib\nPyMySQL\n] tests/requirements_txt_fixer_test.py::test_integration[-e tests/requirements_txt_fixer_test.py::test_integration[bar\npkg-resources==0.0.0\nfoo\n-1-bar\nfoo\n] tests/requirements_txt_fixer_test.py::test_integration[foo\npkg-resources==0.0.0\nbar\n-1-bar\nfoo\n] tests/requirements_txt_fixer_test.py::test_requirement_object