Python读取复杂CSV文件

class ReadCSV:
	anchor = 0
	final = []
	def __init__(self, path, head=0):
		quote = 0
		row_tmp = ''
		cell_tmp = ''
		cell = []
		channel = file(path,'r')
		data = channel.readlines()
		channel.close()
		reg_quote = re.compile('\"')
		rm_quote = re.compile(r'"([\s\S]*)"')
		db_quote = re.compile(r'""')	
		for line in data:
			quote += len(reg_quote.findall(line))
			if quote%2 == 0:
				quote = 0
				row_tmp += line.strip('\n')
				row_tmp = row_tmp.split(',')
				for col in row_tmp:
					quote+=len(reg_quote.findall(col))
					if quote%2 == 0:
						cell_tmp += col	
						cell_tmp = rm_quote.sub(r'\1',cell_tmp)
						cell_tmp = db_quote.sub('\"',cell_tmp)
						cell.append(cell_tmp)
						cell_tmp = ''
						quote = 0
					else:
						cell_tmp += col+','
				ReadCSV.final.append(cell)
				cell = []
				row_tmp = ''
			else:
				row_tmp+=line
	
	def getCell(self,row,col):
		return ReadCSV.final[row][col]
	
	def getValue(self, title):
		return self.getCell(ReadCSV.anchor, ReadCSV.final[0].index(title))
	
	def next(self):
		if self.done() != True and ReadCSV.anchor < len(ReadCSV.final)-1:
			ReadCSV.anchor += 1
	
	def done(self):
		if ReadCSV.anchor == len(ReadCSV.final)-1:
			return True
		else:
			return False
			
	def reset(self):
		ReadCSV.anchor = 0

CSV file:

NameAgeAddress
Zhang_san13Address1:
1. aaaaa
2. aaad "bbbb",
3. bacad,
adfa"aaa".
Li_si14Address2, xxxx
aaaa"
bbbbb".,
Wang_wu15Address3

Example:

p = ReadCSV('c:/csvfile.csv')
print p.getCell(1,2)
output:

Address1:
1. aaaaa
2. aaad "bbbb",
3. bacad,
adfa"aaa".

p.next()
print p.getValue('Name')
p.next()
print p.getValue('Address')
output:

Zhang_san

Address2, xxxx
aaaa"
bbbbb".,

p.done()
p.next()
p.next()
p.next()
p.done()
output:

False

True

p.next()
p.next()
print p.getValue('Name')
p.reset()
print p.getValue('Name')
output:

Li_si

Name




  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: CSV文件(Comma-Separated Values)是一种以逗号作为字段分隔符的文本文件格式,用于存储表格数据。而BLF文件(Binary Log File)是一种二进制格式的日志文件,通常用于记录某个系统或应用程序的运行过程中的事件和数据。 通常情况下,CSV文件是不直接可以转换成BLF格式文件的,因为它们是完全不同的文件格式。CSV文件只存储数据值,而BLF文件存储着更加复杂的结构化数据和相关的信息。 要将CSV文件转成BLF格式文件,通常需要进行以下步骤: 1. 读取CSV文件的数据:使用适当的编程语言或工具,读取CSV文件中的数据并以合适的数据结构进行保存。 2. 创建BLF文件的结构:BLF文件通常有特定的结构,包括头部信息、记录类型以及每个记录的格式等。根据需要,创建一个与CSV数据相对应的BLF文件结构。 3. 将CSV数据映射到BLF文件:根据BLF文件结构中的记录类型和格式要求,将CSV数据映射到相应的字段和数据类型中。 4. 将数据写入BLF文件:将映射后的数据写入BLF文件,确保符合BLF文件的规范和格式要求。 需要注意的是,这个过程中需要根据具体的数据结构和编程语言选择合适的技术和工具。另外,一些特殊的CSV文件可能无法直接转换成BLF文件,需要额外的数据处理和转换步骤。 总之,CSV文件可以通过一定的数据处理和转换步骤转成BLF格式文件,但具体的转换方法和工具需要根据实际需求和情况来确定。 ### 回答2: CSV文件是以逗号分隔的文本文件,常用于存储表格数据。而BLF文件是一种二进制文件,通常用于存储音频文件或者日志文件。因为两种文件的格式和存储方式不同,所以不能直接将CSV文件转换为BLF格式文件。 转换CSV文件为BLF文件,需要经过以下步骤: 1. 首先,将CSV文件的数据提取出来。可以使用编程语言如Python或者专门的数据处理软件来操作,将CSV文件中的数据按照需要的格式进行处理,提取出来。 2. 然后,根据BLF文件的格式要求,将提取出来的数据进行整理和转换。BLF文件有特定的数据结构和编码规则,按照BLF格式的要求重新组织数据。 3. 最后,将整理好的数据按照BLF文件的格式写入二进制文件。可以使用编程语言中的文件操作相关函数或者专门的文件转换工具来完成。 总之,将CSV文件转换为BLF格式文件需要进行数据的提取、整理和编码转换等多个步骤。这是一个相对复杂的过程,需要根据具体的应用场景和数据格式要求进行定制开发或使用专门的工具来实现。 ### 回答3: CSV文件和BLF文件是两种不同的文件格式,不能直接将CSV转换为BLF格式。 CSV是一种常见的文本文件格式,它以逗号分隔不同的数据字段,并且每一行表示一个数据记录。CSV文件通常用于存储和交换表格数据。 而BLF(Binary log format)是一种二进制日志文件格式,它通常用于存储系统或应用程序的日志记录。BLF文件包含了时间戳、事件类型、数据包等信息,用于跟踪和分析系统行为。 由于CSV和BLF文件的结构和存储方式不同,所以无法直接转换。如果需要将CSV文件的数据转换为BLF文件,需要借助专门的文件转换工具或编程语言来实现数据的重组和转换。具体的转换过程将取决于CSV文件的结构和需要生成的BLF文件的要求。 总结来说,CSV不能直接转换成BLF格式文件,需要借助额外的工具或编程手段实现数据的转换和重组。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值