aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/vk/tracking/db/io.py
diff options
context:
space:
mode:
authorEgor Tensin <Egor.Tensin@gmail.com>2017-01-28 02:40:27 +0300
committerEgor Tensin <Egor.Tensin@gmail.com>2017-01-28 02:40:27 +0300
commit1c0e2c13d4f0acbe42e43d886df4f1067506efed (patch)
tree8d76116d718293275315605b66f1466af7d09c27 /vk/tracking/db/io.py
parentbin: move file i/o to a separate module (diff)
downloadvk-scripts-1c0e2c13d4f0acbe42e43d886df4f1067506efed.tar.gz
vk-scripts-1c0e2c13d4f0acbe42e43d886df4f1067506efed.zip
vk: move file i/o to a separate module
Diffstat (limited to '')
-rw-r--r--vk/tracking/db/io.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/vk/tracking/db/io.py b/vk/tracking/db/io.py
new file mode 100644
index 0000000..04bab3d
--- /dev/null
+++ b/vk/tracking/db/io.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 sys
+
+class OutputWriterCSV:
+ def __init__(self, fd=sys.stdout):
+ self._fd = fd
+ self._writer = csv.writer(fd, lineterminator='\n')
+
+ def write_row(self, row):
+ self._writer.writerow(row)
+ self._fd.flush()
+
+class InputReaderCSV:
+ def __init__(self, fd=sys.stdin):
+ self._reader = csv.reader(fd)
+
+ def __iter__(self):
+ return iter(self._reader)
+
+@contextmanager
+def _open_file(path=None, default=None, **kwargs):
+ fd = default
+ if path is None:
+ pass
+ else:
+ fd = open(path, **kwargs)
+ try:
+ yield fd
+ finally:
+ if fd is not default:
+ fd.close()
+
+def open_output_text_file(path=None):
+ return _open_file(path, default=sys.stdout, mode='w', encoding='utf-8')
+
+def open_input_text_file(path=None):
+ return _open_file(path, default=sys.stdin, mode='r', encoding='utf-8')