aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/bin/utils
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2017-01-28 02:01:44 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2017-01-28 02:01:44 +0300
commitf989577d524f27c079af619b9d0b6b4a9d70c386 (patch)
treebad199636fc9cd7152e64e8ffb6075c13755412a /bin/utils
parentrefactoring (diff)
downloadvk-scripts-f989577d524f27c079af619b9d0b6b4a9d70c386.tar.gz
vk-scripts-f989577d524f27c079af619b9d0b6b4a9d70c386.zip
bin: move file i/o to a separate module
Diffstat (limited to 'bin/utils')
-rw-r--r--bin/utils/output.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/bin/utils/output.py b/bin/utils/output.py
new file mode 100644
index 0000000..8954c8b
--- /dev/null
+++ b/bin/utils/output.py
@@ -0,0 +1,43 @@
+# Copyright (c) 2017 Egor Tensin <Egor.Tensin@gmail.com>
+# This file is part of the "VK scripts" project.
+# For details, see https://github.com/egor-tensin/vk-scripts.
+# Distributed under the MIT License.
+
+from contextlib import contextmanager
+import csv
+import json
+import sys
+
+class OutputWriterJSON:
+ def __init__(self, fd=sys.stdout):
+ self._fd = fd
+
+ def write(self, something):
+ self._fd.write(json.dumps(something, indent=3, ensure_ascii=False))
+ self._fd.write('\n')
+
+class OutputWriterCSV:
+ def __init__(self, fd=sys.stdout):
+ self._writer = csv.writer(fd, lineterminator='\n')
+
+ def write_row(self, row):
+ self._writer.writerow(row)
+
+@contextmanager
+def _open_file(path=None, **kwargs):
+ fd = sys.stdout
+ if path is None:
+ pass
+ else:
+ fd = open(path, **kwargs)
+ try:
+ yield fd
+ finally:
+ if fd is not sys.stdout:
+ fd.close()
+
+def open_text_file(path=None):
+ return _open_file(path, mode='w', encoding='utf-8')
+
+def open_binary_file(path=None):
+ return _open_file(path, mode='wb')