我有一个数据转储是“搞砸”的CSV。 (大约100个文件,每个文件大约有1000行实际CSV数据。)
转储除CSV外还有一些其他文本。如何以编程方式单独提取CSV部分?在Python中识别csv
作为一个例子,数据文件看起来像这样的事情
Session:1
Data collection date: 09-09-2016
Related questions:
Question 1: parta, partb, partc,
Question 2: parta, partb, partc
"field1","field2","field3","field4"
"data11","data12","data13","data14"
"data21","data22","data23","data24"
"data31","data32","data33","data34"
"data41","data42","data43","data44"
"data51","data52","data53","data54"
我需要提取CSV一部分。
注意事项,
开头的文字不限于4-5行。
额外的文本不只是在
我看到this post的文件的开头是建议使用re.split和/或csv.Sniffer, 但是我的尝试是不是卓有成效。
with open("untitled.csv") as csvfile:
dialect = csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
print(dialect.__dict__)
csvstarts = False
csvdump = []
for ln in csvfile.readlines():
toks = re.split(r'[,]', ln)
print(toks)
if toks[0] == '"field1"' and not csvstarts: # identify by the header line
csvstarts = True
continue
if csvstarts:
if toks[0] == '"field1"': # identify the start of subsequent csv data
csvstarts = False
continue
csvdump.append(ln) # record the current line
print(csvdump)
现在,只有存在一堆数据时,我才能够准确识别csv行。
有什么更好的我可以做吗?
什么分开行与数据和行与文本呢?如果文本行以“? – Aidenhjj
”开始,那么这就是问题出在哪里,除非您将空白行视为分隔符,否则没有任何东西可以将csv数据与文本分开。 – okkhoy