Ovvpfile: převedení mezer na taby
This commit is contained in:
		
							parent
							
								
									3b27b87e35
								
							
						
					
					
						commit
						5e07412d92
					
				
					 1 changed files with 64 additions and 64 deletions
				
			
		|  | @ -1,81 +1,81 @@ | ||||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||||
| 
 | 
 | ||||||
| try: | try: | ||||||
|     from django.http import HttpResponse | 	from django.http import HttpResponse | ||||||
|     from django.utils.encoding import force_text | 	from django.utils.encoding import force_text | ||||||
| except: | except: | ||||||
|     force_text = str | 	force_text = str | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| class OvvpFile(object): | class OvvpFile(object): | ||||||
|     def __init__(self): | 	def __init__(self): | ||||||
|         # { header: value, ... } | 		# { header: value, ... } | ||||||
|         self.headers = {} | 		self.headers = {} | ||||||
|         # [ 'column-name', ... ] | 		# [ 'column-name', ... ] | ||||||
|         self.columns = [] | 		self.columns = [] | ||||||
|         # [ { column: value, ...}, ...] | 		# [ { column: value, ...}, ...] | ||||||
|         self.rows = [] | 		self.rows = [] | ||||||
| 
 | 
 | ||||||
|     def to_lines(self): | 	def to_lines(self): | ||||||
|         # header | 		# header | ||||||
|         for hk in sorted(self.headers.keys()): | 		for hk in sorted(self.headers.keys()): | ||||||
|             yield '%s\t%s\n' % (hk, self.headers[hk]) | 			yield '%s\t%s\n' % (hk, self.headers[hk]) | ||||||
|         yield '\n' | 		yield '\n' | ||||||
|         # columns | 		# columns | ||||||
|         yield '\t'.join([c for c in self.columns]) + '\n' | 		yield '\t'.join([c for c in self.columns]) + '\n' | ||||||
|         # rows | 		# rows | ||||||
|         for r in self.rows: | 		for r in self.rows: | ||||||
|             yield '\t'.join([force_text(r[c]) for c in self.columns]) + '\n' | 			yield '\t'.join([force_text(r[c]) for c in self.columns]) + '\n' | ||||||
| 
 | 
 | ||||||
|     def to_string(self): | 	def to_string(self): | ||||||
|         return ''.join(self.to_lines()) | 		return ''.join(self.to_lines()) | ||||||
| 
 | 
 | ||||||
|     def to_HttpResponse(self): | 	def to_HttpResponse(self): | ||||||
|         return HttpResponse(self.to_string(), content_type='text/plain; charset=utf-8') | 		return HttpResponse(self.to_string(), content_type='text/plain; charset=utf-8') | ||||||
| 
 | 
 | ||||||
|     def parse_from(self, source, with_headers=True): | 	def parse_from(self, source, with_headers=True): | ||||||
|         "Parse data from file, string or line iterator, overwriting self" | 		"Parse data from file, string or line iterator, overwriting self" | ||||||
|         if isinstance(source, str) or isinstance(source, unicode): | 		if isinstance(source, str) or isinstance(source, unicode): | ||||||
|             return self.parse_from(source.split('\n')) | 			return self.parse_from(source.split('\n')) | ||||||
|              | 			 | ||||||
|         it = iter(source) | 		it = iter(source) | ||||||
| 
 | 
 | ||||||
|         # header | 		# header | ||||||
|         self.headers = {} | 		self.headers = {} | ||||||
|         if with_headers: | 		if with_headers: | ||||||
|             for r in it: | 			for r in it: | ||||||
|                 if isinstance(r, str): | 				if isinstance(r, str): | ||||||
|                     r = r.decode('utf8') | 					r = r.decode('utf8') | ||||||
|                 assert isinstance(r, unicode) | 				assert isinstance(r, unicode) | ||||||
|                 r = r.rstrip('\n') | 				r = r.rstrip('\n') | ||||||
|                 if r == u"": | 				if r == u"": | ||||||
|                     break | 					break | ||||||
|                 k, v = r.split(u'\t', 1) | 				k, v = r.split(u'\t', 1) | ||||||
|                 self.headers[k] = v | 				self.headers[k] = v | ||||||
| 
 | 
 | ||||||
|         # columns | 		# columns | ||||||
|         r = it.next() | 		r = it.next() | ||||||
|         if isinstance(r, str): | 		if isinstance(r, str): | ||||||
|             r = r.decode('utf8') | 			r = r.decode('utf8') | ||||||
|         self.columns = [cn.strip() for cn in r.split(u'\t') if cn.strip() != ""] | 		self.columns = [cn.strip() for cn in r.split(u'\t') if cn.strip() != ""] | ||||||
| 
 | 
 | ||||||
|         # rows | 		# rows | ||||||
|         self.rows = [] | 		self.rows = [] | ||||||
|         for r in it: | 		for r in it: | ||||||
|             if isinstance(r, str): | 			if isinstance(r, str): | ||||||
|                 r = r.decode('utf8') | 				r = r.decode('utf8') | ||||||
|             r = r.rstrip('\n') | 			r = r.rstrip('\n') | ||||||
|             if not r: | 			if not r: | ||||||
|                 break | 				break | ||||||
|             rtup = r.split(u'\t') | 			rtup = r.split(u'\t') | ||||||
|             rdict = {} | 			rdict = {} | ||||||
|             for ci in range(len(self.columns)): | 			for ci in range(len(self.columns)): | ||||||
|                 rdict[self.columns[ci]] = rtup[ci] | 				rdict[self.columns[ci]] = rtup[ci] | ||||||
|             self.rows.append(rdict) | 			self.rows.append(rdict) | ||||||
|          | 		 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| def parse(source, with_headers=True): | def parse(source, with_headers=True): | ||||||
|     o = OvvpFile() | 	o = OvvpFile() | ||||||
|     o.parse_from(source, with_headers=with_headers) | 	o.parse_from(source, with_headers=with_headers) | ||||||
|     return o | 	return o | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Pavel "LEdoian" Turinsky
						Pavel "LEdoian" Turinsky