我有一个包含多个标头和表的CSV文件,该文件是由我们的系统创建的。行数是动态的,但表标题名称始终相同。在每个表之间,有一个空白行。 我正在使用python3.7.3,想要获取中间表(设备表),然后上传到我们的数据库中。
如何才能只获得中间表?在这种情况下,正则表达式可以使用CSV文件吗?
原始文件:
Report title:ABC
Created Date:Jul-15-2019
Model
Model Name,Number
abc,1
abc,2
Device
Device Name,Number
efg,1
efg,2
efg,3
Missing Device
Device Name,Number
xyz,3
xyz,4
我想要的表(没有表名):
Device Name,Number
efg,1
efg,2
efg,3
答案 0 :(得分:0)
如果您知道所有表都由换行符隔开,则可以只计算换行符,然后解析目标表。像这样:
import csv
table_ix = 2
with open('test.csv') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
empty_line_count = 0
for row in csv_reader:
if len(row) == 0:
empty_line_count += 1
if empty_line_count == table_ix:
# do your parsing here
print(row)
它不漂亮,但是可以用。但我建议您使用Pandas等工具。
答案 1 :(得分:0)
这是一种方法:
import csv
import itertools
with open('report.txt') as fh:
fh = itertools.dropwhile(lambda line: 'Device Name,Number' not in line, fh)
fh = itertools.takewhile(lambda line: line != '\n', fh)
reader = csv.reader(fh)
for row in reader:
print(row)
['Device Name', 'Number']
['efg', '1']
['efg', '2']
['efg', '3']
itertools.dropwhile
来执行第2步itertools.takewhile
进入第3步