[41c1e8]: / exseek / scripts / ioutils.py

Download this file

86 lines (76 with data), 2.4 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import os
import sys
def make_dir(path):
if not os.path.exists(path):
try:
os.makedirs(path)
except OSError as e:
if e.errno == 17:
pass
else:
raise e
def prepare_output_file(path):
if path.startswith('/dev'):
return
dirpath = os.path.dirname(path)
if dirpath == '':
dirpath = '.'
if not os.path.exists(dirpath):
os.makedirs(dirpath)
def append_extra_line(f):
"""Yield an empty line after the last line in the file
"""
for line in f:
yield line
yield ''
def open_file_or_stdout(filename):
if filename == '-':
return sys.stdout
else:
return open(filename, 'w')
def open_file_or_stdin(filename):
if filename == '-':
return sys.stdin
else:
return open(filename, 'r')
import zipfile
class ArchiveFile(object):
def __init__(self, filename, mode='r', format='directory', **kwargs):
self.filename = filename
self.format = format
if self.format == 'directory':
if 'r' in mode:
if not os.path.isdir(filename):
raise IOError('cannot open the directory: {}'.format(filename))
else:
os.makedirs(filename, exist_ok=True)
elif self.format == 'file':
self.f = open(file, mode)
elif self.format == 'zip':
if ('w' in mode) and ('compression' not in kwargs):
kwargs['compression'] = zipfile.ZIP_STORED
self.f = zipfile.ZipFile(filename, mode, **kwargs)
def open(self, name, mode='r', **kwargs):
if self.format == 'directory':
return open(os.path.join(self.filename, name), mode)
elif self.format == 'file':
return self.f
elif self.format == 'zip':
if 'r' in mode:
return self.f.open(name, mode)
else:
return
def close(self):
if self.format == 'directory':
pass
elif self.format == 'file':
self.f.close()
elif self.format == 'zipfile':
self.f.close()
def namelist(self):
if self.format == 'directory':
return os.listdir(self.filename)
elif self.format == 'file':
return self.filename
elif self.format == 'zip':
return self.f.namelist()